결합 연산자
문자열에 대한 덧셈연산자(+) = 연결(결합) 연산자
-어떤 데이터를 문자열과 덧셈연산자로 연산할 경우 산술연산의 덧셈이 아닌 단순 문자열 결합(연결)으로 사용됨 이 때, 어떤 데이터를 문자열 타입으로 변환하여 두 문자열을 연결 ex) "문자열" + "문자열" = "문자열문자열"
int a=10, b=20;
System.out.println(a + b); // 일반 산술연산 (덧셈 기능)
System.out.println("a=" + a); // "문자열" + 정수 = "문자열정수"
String str = "a=" + a; // 문자열 표현, 우선순위대로 계산(" " >> + )
System.out.println(str);
System.out.println("b=" + b); //"b=" + 20 -> "b = 20"
int c = a + b;
System.out.println(a + "+" + b + "=" + c);
// 1. a + "+"를 수행하여 "10 + " 문자열 생성
// 2. "10 + " 문자열과 + b 를 수행하여 "10 + 20" 문자열 생성
// 3. "10 + 20" 문자열과 + "=" 를 수행하여 "10 + 20 = " 문자열 생성
// 4. "10 + 20 = " 문자열과 + c 를 수행하여 10 + 20 = 30" 문자열 생성
System.out.println("덧셈 결과 : " + c);
System.out.println(10 + 20); // 30(일반 산술연산 = 덧셈)
System.out.println(10 + "20"); // "1020" 문자열 결합
System.out.println("10" + 20); // "1020" 문자열 결합
System.out.println(10 + "20" + 30); // "102030" 문자열 결합
System.out.println("10" + 20 + 30); // "102030" 문자열 결합
System.out.println(10 + 20 + "30"); // "3030" 문자열 결합
// => 10 + 20 덧셈을 먼저 수행하여 정수 30이 되고,
// 정수 30과 문자열 "30"을 결합하여 "3030" 문자열이 됨
// String 타입 변수 name에 자신의 이름을 저장
// int 타입 변수 age에 자신의 나이를 저장
String name = "김영미";
int age = 20;
// 주민번호 표현시
// int jumin = 031010-3123456; // 중간에 '-' 기호가 들어가면 뺄셈으로 취급되어 결과값지 잘못나옴
// int jumin = 0310103123456; // 오류발생! int 타입으로 표현 불가능
// long jumin =0310103123456L; // long 타입으로 표현하거나
String jumin = "031010-3123456"; //문자열로 표현
System.out.println(jumin);
// 이름 : 김영미
// 나이 : 20
// 주민번호
System.out.println("이름: " + name);
System.out.println("나이: " + age);
System.out.println("주민번호: " + jumin);
대입 연산자
대입연산자(=)
- 우변의 데이터를 좌변의 변수에 대입(저장) => 연산의 방향이 우 -> 좌로 진행됨 ex) x = y = 3 의 경우의 y에 3을 대입하고, x에 y를 대입
- 모든 연산자 중에서 우선순위가 가장 낮다. 즉, 다른 모든 작업을 수행한 후 대입연산을 수행
int a = 10; // 우변의 데이터 10을 좌변의 변수 a에 대입(저장)
int b;
b = a; // 우변의변수 a의 값을 좌변의 변수 b에 대입(저장)
System.out.println(a);
System.out.println(b);
확장(복합) 대입연산자 (+=, -=, *=, /=, %=)
- 대입연산자와 산술연산자를 조합한 연산자
- 좌변과 우변의 데이터끼리 산술연산을 먼저 수행하고 그 결과값을 다시 좌변의 변수에 대입(저장) => a = a + b 는 a += b;로 표현 가능
b 와 a의 덧셈 결과를 다시 변수 b에 저장
// =>마치 b에 a 값을 누적하는 것과 동일
b = b + a; // 10 + 10 = 20이 변수 b에 저장됨(b에 a값을 누적)
// b += a; //b = b + a 와 동일
System.out.println(b);
//b 와 a의 덧셈 결과를 다시 변수 b에 저장
// =>마치 b에 a 값을 누적하는 것과 동일
// b = b + a; // 10 + 10 = 20이 변수 b에 저장됨(b에 a값을 누적)
b += a; //b = b + a 와 동일
System.out.println(b);
⇒ 위 코드 값이 같은 것을 알 수 있다.
b 와 a의 뺄셈 결과를 다시 변수 b에 저장
// b와 a의 뺄셈 결과를 다시 변수 b에 저장
// b = b - a; // 20 - 10 = 10이 변수 b에 저장됨
b -= a; // b = b - a와 동일
System.out.println(b);
b 와 a의 곱셈 결과를 다시 변수 b에 저장
//b와 a의 곱셈 결과를 다시 변수 b에 저장
// b = b * a; // 10 * 10 = 100이 변수 b에 저장됨
b *= a; // b = b*a 와 동일
System.out.println(b);
b 와 a의 나눗셈 결과(몫)를 다시 변수 b에 저장
// b와 a의 나눗셈 결과(몫)를 다시 변수 b에 저장
// b = b / a; // 100 / 10 = 10이 변수 b에 저장됨
b /= a; // b = b/a 와 동일
System.out.println(b);
b 와 a의 나눗셈 결과(나머지)를 다시 변수 b에 저장
// b와 a의 나눗셈 결과(나머지)를 다시 변수 b에 저장
// b = b % a; // 10 % 10 = 0이 변수 b에 저장됨
b %= a; // b = b%a 와 동일
System.out.println(b);
byte b1 = 10;
// b1과 정수 10을 더한 값을 다시 b1에 저장
// b1 = b1 + 10; // byte + in = int + int = int
// => 오류발생! Type mismatch: cannot convert from int to byte
// => 결과값을 다시 byte 타입으로 변환해야 한다!
b1 = (byte)(b1 + 10);
System.out.println(b1);
// b1 = b1 + 10; //오류 발생!
// 확장 대입연산자를 사용하여 b1 + 10의 값을 b1에 저장
// (복합대입연산자를 사용하면 타입을 맞춰줄 필요가 없다.)
b1 += 10;
System.out.println(b1);
// char 타입 변수 값을 변화시킬 때 확장 대입연산자를 많이 사용함
// => 복합대입연산자를 사용하는 이유!
char ch = 'A';
// ch = ch + 3; // 컴파일 에러 발생!
//해결방법
ch = (char)(ch + 3); // 1. 형변환을 수행하거나
ch += 3; // 2. 확장 대입연산자 사용
System.out.println(ch); // G 출력
비교 연산자(관계 연산자) (>, >=, <=, <, ==, !=)
- 두 피연산자 간의 대소 관계 등을 비교하여 true 또는 false 값 리턴
- 주의! 동등비교 연산자는 수학(=) 과는 달리 '==' 형태의 기호 사용 주의! >= 또는 <= 연산의 순서 변경 불가능! ( => (x), =<(x) ) -- 항상 오른쪽에 '='기호가 들어가야함
- 리턴되는 결과값을 바로 사용하거나 boolean 타입 변수에 저장 가능
- 서로 다른 데이터타입끼리의 비교 시 산술연산과 마찬가지로 동일한 타입으로 일치시킨 후 비교 연산을 수행
int a = 10, b = 5;
System.out.println("a > b 인가? " + (a > b) );
System.out.println("a >= b 인가? " + (a >= b) );
System.out.println("a <= b 인가? " + (a <= b) );
System.out.println("a < b 인가? " + (a < b) );
System.out.println("a == b 인가? " + (a == b) );
System.out.println("a != b 인가? " + (a != b) );
a > b 의 결과(true)를 boolean 타입 변수 result에 저장
boolean result = a > b; // boolean은 true/false값만 얻을 수 있다.
// int result = a > b; // 결과값이 true or false 이므로 int형 변수에는 저장 불가
// => a > b 의 결과(true)를 boolean 타입 변수 result에 저장
System.out.println(result);
char 타입끼리 비교 시 int 타입으로 변환 후 비교 (유니코드 값 비교)
System.out.println('A' > 'B'); //65 > 66 비교 -> false
System.out.println('A' == 65); // true
//주의! double 타입과 float 타입 비교 시
System.out.println(0.1 == 0.1f); // false, 같은 값이나 다른 값으로
System.out.println((float)0.1 == 0.1f); // true
// => double 타입(8byte)의 0.1이 float타입(4byte)으로 변환됨
다른 연산과 관계 연산자를 결합하여 연산 결과의 대소 관계 판별 가능
System.out.println(a + b > a - b); // (+ >> >)
// false ! = true -> false
System.out.println(('A'> 'B') == ('A' == 65)); // flase == true
// false ! = true -> true
'JAVA' 카테고리의 다른 글
[JAVA] 조건문(if, if-else, 다중if -else if문) (0) | 2023.09.08 |
---|---|
[JAVA] 6가지 연산자(논리, 증감, 삼항) (0) | 2023.09.08 |
[JAVA] 산술 연산 시 자동 형변환 (0) | 2023.09.08 |
[JAVA] 산술연산자 (0) | 2023.09.08 |
[JAVA] 데이터 타입간의 형변환 (0) | 2023.09.08 |