Java 파트3. 연산자와 연산식, break문

1. 산술 연산자

  • byte, short, char 타입일 경우 모두 int 타입으로 변환되어 연산된다.
  • 피연산자가 모두 정수타입이고 long타입이 포함되어 있을 경우 모두 long타입으로 변환되어 연산된다.
  • 피연산자 중 실수 타입이 있을 경우 허용 범위가 큰 실수 타입으로 변환되어 연산된다.
  • 부호연산의 결과는 int로 자동변환된다.
byte b = 100;
byte result = -b; // 컴파일에러 , int로 해야함
// int 이하의 정수에 산술연산(부호연산)은 int 타입으로 연산된다.

char c1 = 'A'+1;
char c2 = 'A';
char c3 = c2 + 1; // 컴파일 에러, int를 사용해야함

‘A’ + 1은 리터럴 문자 ‘A’에 1을 더한 것으로 66이다. 리터럴 간의 연산은 컴파일 단계에서 수행하기 때문에 타입 변환이 없다. 하지만 변수와 1을 더하면 c2는 int타입으로 변환되기 때문에 연산 결과는 int여야 한다.

2. 문자열 결합 연산자


+연산자의 피연산자 중 한 쪽이 문자열일 경우

String str1 = "JDK" + 6.0 // 6.0이 문자열로 변환되어 합쳐진다.
String str2 = str1 + " 특징" // JDK6.0 특징

"JDK" + 3 + 3.0; // 맨 앞이 문자열 연산이므로 JDK33.0
3 + 3.0 + "JDK" // 맨 앞은 그냥 덧셈 연산이므로 6.0JDK 


3. 비교 연산자


int v1 = 1;
double v2 = 1.0;
System.out.print(v1==v2) // true ,, double이 더 크므로 double타입으로 v1이 변환된다.

double v3 = 0.1;
float v4 = 0.1f;
System.out.print(v3==v4) // False 
System.out.print((float)v3==v4) // True

double과 float의 비교의 경우 double이 float 보다 더 큰 타입이므로 float가 double타입으로 자동형변환 되는데 이때 위 코드를 예로 들면 0.1이 아닌 다른 수가 된다. 왜냐하면 float를 double로 타입 변환을 하게 되면 부동소수점 방식 때문에 정확하게 0.1이 되지 않는다. 따라서, double을 float타입으로 강제 형변환시켜서 비교해줘야 한다. 따라서 되도록이면 같은 타입으로 선언하도록 하자.

4. break문


C언어나 python과 마찬가지로 break문은 가장 가까운 반복문만 종료하고 바깐쪽 반복문은 종료하지 않는다. 하지만 java는 라벨이라는게 존재해서 break 라벨명 을 사용하면 라벨 전체를 빠져나가게 된다.

cutter:
for (char upper='A';upper<='Z';upper++) {
	for(char lower ='a';lower<='z';lower++) {
		System.out.printf("%c - %c\n",upper,lower);
		if (lower=='g')
			break cutter;
	}
}

break cutter 시 cutter 밖으로 바로 빠져나온다. 라벨명: 바로 옆에 코드를 진행해도 되고 위처럼 한 칸 내려서 진행해도 된다.


© 2021. By Backtony