본문 바로가기
JAVA

JAVA 2일차(1)

by teg0 2025. 8. 6.

연산자

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