본문 바로가기
언어/Java

연산자

by 넬준 2021. 5. 20.

단항 연산자

부호 연산자(+,-)의 결과값은 int형이다.

 

증감 연산자(++, --)

연산식에서 증감 연산자만 있으면 변수 앞, 뒤 어디에 있든 같다.

++i;
i++; //둘 다, i=i+1;로 같다

다른 연산자와 함께 있으면 앞이냐 뒤냐에 따라 결과값이 달라진다.

 

++i;가 i=i+1;보다 연산속도가 빠르다고 알고 있지만, 컴파일된 바이트 코드를 보면 동일하게 생성되기 때문에 차이가 있다고 볼 수 없다.

 

비트 반전 연산자(~) 결과값은 int형이다. 부호가 반대인 새로운 값이 나온다.

 

이항연산자

산술 연산자(+, -, *, /, %)

long을 제외한 정수형 연산은 int형으로 산출되고, 하나라도 실수형이면 실수형으로 결과가 나온다.

 

따라서 나누기를 할 때에도 주의를 해야한다.

int i1 = 10;
int i2 = 4;
int result1 = i1 / i2; //2,  int간 연산이니 결과값도 int형이다.
double result2 = i1 / i2; //2.0, 연산 후 결과가 2이니 2를 실수화해서 2.0이 된다.
double result3 = (double)i1 / i2; //2.5, 피연산자 중 최소 하나를 실수화해주면 원하는 값을 얻을 수 있다.

 

문자열 연결 연산자(+)

"ABC"+1+2; //"ABC12"
1+2+"ABC"; // "3ABC"

 

비교 연산자(<,<=,>,>=,==,!=)

연산 수행 전에 형변환을 통해 일치시킨다.

'A' == 65 //true, 'A'가 int형으로 변환되어 65가 된 후 오른쪽 65와 비교
3 == 3.0 //true

 

문자열비교

String str1 = "가나다";
String str2 = "가나다";
String str3 = new String("가나다");
		
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false
System.out.println(str1.equals(str3)); //true

문자열 리터럴이 동일하면 동일 String 객체를 참조한다. 따라서 str1과 str2는 같은 객체 주소값을 갖는다.

str3는 새로 생성한 String객체의 객체 주소값을 갖기 때문에 str1, str2와 다른 값을 갖는다.

String 객체의 문자열을 비교하고 싶을 땐 equals() 메소드를 사용. (return값 boolean형)

 

논리 연산자(&&, &, ||, |, ^, !)

^는 배타적논리합으로 하나는 true, 다른 하나는 false일 경우만 true다.

&&과 ||이 &, |보다 효율적이다.

 

비트 논리 연산자(&, |, ^, ~), 비트 이동 연산자(<<, >>, >>>)

피연산자가 boolean형이면 일반 논리 연산자고, 정수형이면 비트 논리 연산자다.

 

삼항 연산자

int i = 90;
char c = (i<50)? 'a': (i<100)? 'b': 'c'; //50보다 크고(false), 100보다 작으므로(true) 'b'다.

 

'언어 > Java' 카테고리의 다른 글

Java 기본 6 - 추상클래스  (0) 2021.05.24
Java 기본 5 - Enum  (0) 2021.05.23
자료형  (0) 2021.05.20
JVM  (0) 2021.05.18
Java 기본 1  (0) 2021.05.17

댓글