연산자
1. 논리부정 연산자
논리값(boolean)을 반대로 변경하는 연산자
import java.util.Scanner;
public class Operator1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("true의 부정 : " + !true);
System.out.println("false의 부정 : " + !false);
System.out.println("값1 : ");
int num1 = sc.nextInt();
System.out.println("값2 : ");
int num2 = sc.nextInt();
System.out.println("값1 > 값2이 아님 : " + !(num1 > num2));
}
}
값 두개를 받아서 비교
2. 증감연산자
++ : 변수에 담긴 값을 1 증가시켜주는 연산자
-- : 변수에 담긴 값을 1 감소시켜주는 연산자
(증감연산)변수 : 전위연산 -> 선 증감 후 처리
변수(증감연산) : 후위연산 -> 선 처리 후 증감
public class Operator2 {
public static void main(String[] args) {
int num1 = 0;
System.out.println(num1++); // 0
// 1 증가
System.out.println(++num1); // 2
System.out.println(num1--); // 2
// 1 감소
System.out.println(--num1); // 0
System.out.println(num1++); // 0
// 1 증가
System.out.println(num1--); // 1
// 1 감소
System.out.println(--num1); // -1
System.out.println(num1++); // -1
// 1 증가
System.out.println(++num1); // 1
}
}
3. 산술연산자
+, -, *, /, %
복합대입연산자
산술연산자와 대입연산자를 결합해서 사용할 수 있다.
+= /= -= *= %=
a = a % 3 -> a %= 3;
public class Operator3 {
public static void main(String[] args) {
int a = 5;
int b = 10;
int c = (++a) + b; // a=6 b=10 c=16
int d = 16 / 6; // d=2
int e = c % a; // e=4
int f = e++; // f=4 e=5
int g = (--b) + (d--); //b=9 d=1 g=11
int h = 2;
int i = (a++) + b / (--c / f) * (g-- -d) % (++e + h);
// a=6 + b=9 / (c=15 / f=4) * (g=11 - d=1) % (e=6 + h=2)
// 6 + 9 / 3 * 10 % 8
// 6 + 6 = 12
System.out.println(i);
}
}
4. 비교연산자 / 관계연산자
두 값을 비교하여 조건을 판단하는 연산자
비교결과는 항상 boolean 타입 반환
종류
대소비교 : < > <= >=
동등비교 : == !=
원시타입
정수, 실수, 문자등의 기본 변수는 ==, != 등으로 비교 가능
참조형 비교(String)
String같은 객체는 참조형이므로 ==로 비교시 문제가 발생
참조형은 일반적으로 연산자를 사용해 비교하면, 값 자체가 아닌 주소값이 비교됨
문자열1.equals(문자열2)처럼 내부 함수를 이용해서 비교
public class Operator4 {
public static void main(String[] args) {
int a = 10;
int b = 25;
System.out.println("a == b : " + (a == b));
System.out.println("a <= b : " + (a <= b));
System.out.println("a * 2 > b / 5 : " + ((a * 2) > (b / 5)));
String str1 = "Hello"; //Hello는 문자열 리터럴
String str2 = "Hello";
System.out.println("str1 == str2 : " + (str1 == str2));
System.out.println(str1.equals(str2));
String str3 = new String("Hello");
//String Pool이 아닌 힙 메모리에 저장하기 때문에 주소값이 달라진다.
System.out.println("str1 == str3 : " + (str1 == str3));
System.out.println(str1.equals(str3));
//값은 같다.
//특이케이스(문자와 숫자가능 대소비)
System.out.println('A' + 0);
System.out.println('A' > 70);
}
}
자바에서 문자열 리터럴은 String Pool이라는 메모리 영역에 저장됨
만약 위처럼 동일한 문자열 리터럴이 또 참조가 되면, 기존에 있던 문자열 객체의 주소를 재사용함.
즉, 한번만 리터럴 메모리에 값을 올려 메모리를 효율적으로 사용.
5. 논리연산자
두개의 논리값을 연산해주는 연산자
논리연산자의 결과도 논리값.
논리값 && 논리값 : 왼쪽, 오른쪽 조건이 모두 true일 경우 결과는 true.
논리값 || 논리값 : 왼쪽, 오른쪽 조건 중 하나라도 true인 경우 결과는 true.
import java.util.Scanner;
public class Operator5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//사용자에게 숫자를 입력받아 해당 숫자가 1 ~ 100 사이 값인지 확인
int num;
System.out.println("숫자 입력 : ");
num = sc.nextInt();
// 1 ~ 100사이 값인지 확인
// 1 <= num && num <= 100;
boolean result = num >= 1 && num <= 100;
System.out.println("사용자가 입력한 값은 1이상 100이하이다. : " + result);
//사용자에게 알파벳 하나를 입력받아 대소문자를 확인
char ch;
System.out.println("알파벳 하나 입력 : ");
ch = sc.next().charAt(0);
//문자열에서 문자 하나를 추출하는 함수
//charAt(index)
boolean res1 = (ch >= 'A' && ch <= 'Z'); //true가 출력되면 대문자
boolean res2 = (ch >= 'a' && ch <= 'z'); //true가 출력되면 소문자
//둘다 거짓이면 a~z, A~Z사이에 있는 알파벳이 아닌 다른 문자
System.out.println("사용자가 입력한 값은 알파벳이다. : " + (res1 || res2));
System.out.println("사용자가 입력한 값은 대문자이다. : " + (res1));
System.out.println("사용자가 입력한 값은 소문자이다. : " + (res2));
}
}
6. 삼항연산자
[표현식]
조건식 ? 조건이 참일 경우 : 조건이 거짓일 경우
이때 조건식은 반드시 true or false 반환(논리값)
주로 비교연산, 논리연산자를 통해 작성
import java.util.Scanner;
public class Operator6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = (3 < 10 ? 10 : 20);
//입력받은 정수 값이 양수인지 아닌지 판별해서 출력
//정수값 입력 :
// 양수 / 음수
System.out.println("정수값 입력 : ");
int num2 = sc.nextInt();
String result = (num2 > 0 ? "양수" : "음수");
System.out.println(result);
}
}
연산자 우선 순위

'JAVA' 카테고리의 다른 글
| JAVA 4일차(2) (2) | 2025.08.08 |
|---|---|
| JAVA 4일차(1) (4) | 2025.08.08 |
| JAVA 3일차 (4) | 2025.08.07 |
| JAVA 2일차(2) (2) | 2025.08.06 |
| JAVA 1일차 (3) | 2025.08.05 |