증가연산자(++) : 피연산자의 값을 1증가시킨다.
감소연산자(--) : 피연산자의 값을 1감소시킨다.
전위형 : 값이 참조되기 전에 증가, j=++i;
후위형 : 값이 참조된 후에 증가, j=i++;
"증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형의 차이가 없다."
j=++i; //전위형
++i; //증가 후에
j = i; //참조하여 대입
j=i++; //후위형
j=i; //참조하여 대입 후에
i++; //증가
- 형변환이란,
변수 또는 상수의 타입을 다른 타입으로 변환하는 것- (타입)피연산자
float f = 1234; //int타입의 값을 float타입의 변수에 저장
float f = (float)1234;
int i = 3.14f; //에러. 값손실이 발생할 수 있기 때문에 자동 형변환 안됨.
int i = (int)3.14f; //OK. 수동형변환.
1. byte --> int //자동형변환 OK.
2. int --> byte //자동형변환 불가.
"기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다."
byte b = 100; //OK. byte타입의 범위(-128~127)의 값의 대입
int i = 100;
byte b = i; //에러. i는 변수이므로 위에 선언을 했지만, 어떤 값이 들어올지 모름.
byte b = (byte)i //OK. 수동형변환 필요
byte b = 1000; //에러. byte타입 범위를 벗어난 값의 대입
byte b = (byte)1000; //OK. 그러나 값 손실이 발생해서 변수 b에는 -24가 저장됨.
즉 값손실이 발생하는 경우는 자동형변환 불가.
값손실이 발생하지 않는 경우에만 컴파일러가 자동형변환.
"연산 전에 피연사자의 타입을 일치시키는 것"
1. 두 피연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
long + int --> long + long --> long
float + int --> float + float --> float
double + float --> double + double --> double
2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
byte + short --> int + int --> int //오버플로우 발생을 막기 위해
char + short --> int + int --> int
실수를 소수점 첫 째자리에서 반올림한 정수를 반환
오른쪽 피연산자로 나누고 남은 나머지를 반환
나누는 피연산자는 0이아닌 정수만 허용(부호는 무시됨)
두 피연산자를 비교해서 true 또는 false를 반환
== //두 값이 같으면 true, 아니면 false
!= //두 값이 다르면 true, 같으면 false
문자열 비교에는 == 대신 equals()를 사용해야 한다.
String str1 = "abc";
String str2 = "abc";
System.out.println(str1==str2); //true
System.out.println(str1.equals(str2)); //true
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1==str2); //false
System.out.println(str1.equals(str2)); //true
조건식을 연결할 때 사용하는 연산자
|| (OR결합)
&& (AND결합)
x > 10 && x < 20
10 < x && x < 20 //이렇게 쓰는게 보기 좋다
true -> false
false -> true
조건식의 결과에 따라 연산결과를 달리한다
result = (x > y) ? x : y; //조건식 ? 식1 : 식2, 괄호 생략 가능
오른쪽 피연산자를 왼쪽 피연산자에 저장 후 저장된 값을 반환
lvalue - 대입연산자의 왼쪽 피연산자, 저장공간(변수, 배열)
rvalue - 대입 연산자의 오른쪽 피연산자
i += 3; --> i = i + 3;
i *= 10 + j; --> i = i * (10 + j);