앞서 프로그램은 자료구조와 알고리즘을 활용한다고 했고, 그러한 자료를 담는 공간으로 변수를 사용한다고 했었다.
물론 단순히 저장된 자료를 Retreive 하는 경우도 있으나,
저장된 값을 변경하거나 비즈니스 로직에 의해 가공된 형태의 데이터를 필요로 하는 경우도 있을 것이다.
연산을 수행하는 기호 연산자
연산을 수행하기 위해서는 연산의 대상이 되는 피연산자가 요구되며, 대상의 갯수에 따라 연산자를 구분한다.
항상 연산의 평가식(결과)은 하나의 값을 도출한다는 것도 잊지 말자.
연산자의 우선순위가 확실치 않을 때는 괄호를 사용하자
연산자의 우선순위는 일반적으로 정해져 있지만, 복잡한 로직을 작성하다보면 어떤 식이 먼저 평가될 지 명확하지 않은 경우가 있는데, 이때는 괄호를 사용하여 가독성을 높여주는 것이 좋다.
단항 연산자와 대입연산자를 제외한 나머지 연산자는 좌측->우측으로 결합된다.
아래 표는 우선순위가 높은 것부터 차례대로 나열하였다.
단항 연산자(++,--,+,0,~,!,(type)
산술 연산자(*,/,%)
산술 연산자(+,-)
산술 연산자(<<,>>)
비교 연산자(<,>,<=,>=,instanceof)
비교 연산자(==,!=)
논리 연산자(&)
논리 연산자(^)
논리 연산자(|)
논리 연산자(&&)
논리 연산자(||)
삼항 연산자(? : )
대입 연산자(=,+=,-=,*=./=-,%=,<<=,>>=,&=,^=,!=)
산술 연산 중 이항연산자는 반드시 두 피연산자의 타입을 일치시킨 뒤에 연산을 수행한다.
전위,후위 연산의 경우 단독으로 쓰일 때는 결과가 같으며, 식이나 함수에 포함되는 경우에는 주의하자.
'0' : 48, 'A': 65, 'a': 97 이 값들은 기억해두자!
숫자,알파벳은 유니코드값으로 2byte를 차지하는 char 타입으로 저장되는데, 연속된 리터럴로 등록되어 있다.
문자열의 비교는 ==가 아닌, .equals() 메서드로!
Primitive Type의 경우 변수가 값 자체를 가지고 있지만,
String을 포함한 Reference Type은 참조값을 저장하고 있기 떄문에, == 연산자를 사용할 경우 같은 객체를 가리키고 있는지의 여부를 반환하게 된다.
따라서, 실제 두 문자열이 같은지를 비교하기 위해서는 String 클래스의 equals 메서드를 활용하며, 대소문자를 구분하지 않는 경우 equalsIgnoreCase를 사용하자.
Short-Circuit Evaluation
논리 연산자 중 &&와 ||의 경우에는 효율적인 연산을 위해 식을 모두 평가하지 않고 결과를 도출하는 경우가 있다.
가장 간단한 예로 &&의 경우 앞에 오는 식이 거짓(false)라면 뒤의 식을 평가하지 않고서 false
||의 경우에는 앞에 오는 식이 참(true)라면 뒤의 식을 평가하지 않고서 true로 평가한다.