비교 연산자
비교 연산자에는 대표적으로 초등수학에서도 나오는 부등호 >, <, =, <=, >=, 들과 == , != 가 존재하는데
부등호들은 기존의 의미와 같으며
이외의 == 는 같다라는 의미를 가지며 (=이 대입이라는 의미로 쓰이기 때문에)
!=는 다르다라는 의미로 !를 not이라고 생각하면 편할 것이다.
또한 이 두가지 연산자의 출력은 boolean 즉 true와 false이다.
예시)
int n1 = 100;
int n2 = 100;
int n3 = 50;
n3 = n3 + 50;
System.out.println(n1 == n2); //결과 true
System.out.println(n1 != n2); //결과 false
System.out.println(n1 == n3); // true
n1과 n2 모두 100 인지 boolean 첫번째 출력이 true로 찍히며
n1과 n2 모두 100이 아닌지 물어본 두번째 출력에서는 false가 찍히고
기존 n3 = 50 에 +50을 추가하여 n3에 재정의를 한 n3가 n1과 같냐는 질문엔 true가 나오는 것을 볼 수 있습니다.
예시2)
String s1 = "홍길동";
String s2 = "홍길동";
String s3 = "홍";
s3 = s3 + "길동";
System.out.println(s1 == s2); //문자열에선 이렇게 비교하면 오류남
System.out.println(s1 == s3); //문자열에선 이렇게 비교하면 오류남
System.out.println();
System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3)); // s1.equals(s3) 로 해야 문자열 비교가 가능
결과를 보면 s1 == s2 에 대해 true
s1 == s3에 대해 false로 나타나는데
이는 String은 문자열 즉 참조형이기 때문에 (값형과 참조형 추후 포스팅 예정)
== 와 !=는 Stack에 있는 값을 비교하는 것이므로
참조형은 주소값을 Stack에 저장하고 있기에
s1과 s2는 주소가 같아 true
s1과 s3는 주소가 달라 false가 출력되는 것이다.
참조형의 경우 비교를 하기 위해선
equals 라는 메서드를 이용하여 비교를 해야한다.
논리 연산자
&&는 and 를 의미하며
||는 or를 의미하는데
앞에 나온 == , != 같이 결과값은 boolean으로 나오며 조건문의 조건을 작성할 때 유용하게 사용된다.
또한 잘 쓰이지는 않지만 ^ 이라는 연산자도 존재하는데 디지털 논리회로의 XOR 역할과 같으며 두개의 값이 다를때만 true가 나오는 연산자이다.
int age = 25;
System.out.println((18 <= age) && (age < 60));
System.out.println((age >= 18) && (age > 60));
25라는 변수가 18이상 , 60 미만이므로 첫번째는 true
두 번째 println 출력에 있는 조건 60보다 age 높다는 기준을 못 맞췄으므로 false가 출력이 된다.
대입 연산자, 할당 연산자
=,+=,-=,/=,%=이 존재하며
왼쪽과 오른쪽 자료형이 일치하지 않으면 동작하지 않는다
(모든 연산자가 순서가 같을 경우)연산은 무조건 오른쪽에서 왼쪽으로 간다
예시)
int m1 = 100;
int m2;
int m3;
m3 = m2 = m1;
System.out.println(m2);
System.out.println(m3);
값을 m1에만 100을 주었으나
m2와 m3 출력시 모두 100을 가지고 있음을 알 수 있다 .
즉 연산 순서가 수학적으로 위에 있지 않은 경우 (곱셉,나눗셈,괄호 등등)
우측에서 좌측으로 순서가 진행이 된다.
예시2)
int n = 10;
// n에 1을 추가하시오 > n의 값에 1을 더한 값을 n에 다시 넣어라. > 누적
n = n + 1;
System.out.println(n); // 11 나옴
n += 5;
System.out.println(n); //16 나옴
n = n - 2;
System.out.println(n); //14 나옴
n -= 2;
System.out.println(n); // n= n-2 이므로 12 나옴
n *= 2;
System.out.println(n); // n = n*2 이므로 24 나옴
n /= 2;
System.out.println(n); // n = n/2 이므로 12 나옴
n%= 3; //
System.out.println(n); // n = n%3 = 나머지 0 나옴
// n = 10 + n; , n +=10; 은 되지만 n = 10 - n , n-=10; 을 할 경우 n-10 이기 떄문에 논리 에러 발생함.
// 실행 자체는 되지만 답이 틀리게 나옴 .
증감 연산자
++ 과 --가 존재하며 변수 앞 또는 뒤에 붙일 수 있으며, 변수가 가진 값에 1을 추가로 더하거나 빼는 작업을 할 수 있다.
변수가 n일 때
++n 을 전위 배치라 하며 연산자 우선순위가 가장 높게 설정이 되며
n++ 을 후위 배치라 하며 연산자 우선순위가 가장 낮게 설정이 된다.
예시1)
int n = 10;
int result = 0;
result = 10 + ++n;
// ++n 이 1순위 이므로 11 이 되고 10 + 11 이므로 최종 21이 나옴
System.out.println(result);
예시2)
result = 10 + n++;
//n++ 이므로 마지막 순위이므로 10 + n 우선 함 > result = 20 ++
// result에 20 넣음 > ++은 역할을 할 수 없어서 그냥 사라짐 > 최종 20이 나옴
System.out.println(result);
++이 앞에 있으면 n에 우선적으로 숫자 1을 더한 뒤 10을 만나 21이 되지만
++이 뒤에 있으면 n이 우선적으로 10을 만나 20이 되며
result = 20 ++; 의 형태가 되어 ++이 들어갈 자리가 없어져 결국 20이 출력되는 모습이다.
조건 연산자
유일하게 3항 연산자이며 조건 ? "참" : "거짓" 의 형태를 띄고 있으며 boolean이 출력이 되며 ? 앞에 있는 조건을 통해 참일 경우 : 앞에 작성한 것이 출력 , 거짓 일 경우 : 뒤에 있는 것이 출력이 된다.
예시)
int age;
int n;
age = 25;
System.out.println(age >= 18 ? "통과" : "거절"); // 25 >= 18 이므로 통과
n = 5;
System.out.println(n % 2 == 0 ? "짝수" : "홀수"); // 5를 2로 나누면 1 나옴 false 홀수
첫 번째 조건 age 25이므로 참 -> 통과가 출력이 됨
두 번째 조건 n이 5 이므로 2로 나눈 나머지 값이 == 0이 부합하지 않으므로 뒤에 있는 홀수가 출력이 된다.
비트 연산자
진짜 비트 1010 = 10 등을 계산하는 연산자이다
예시
a = 10;
b = 5;
System.out.println(a & b); // 10 > 1010 (2^3 + 2^1) , 5 > 0101 (2^2 + 2^0) 엔드이므로 1010 , 0101 비교 > 0000
System.out.println(a | b); // 위에 숫자 계산 1111 > 8 + 4 + 2 + 1 = 15
'java' 카테고리의 다른 글
메서드 오버로딩(Method Overloading) (1) | 2024.01.21 |
---|---|
자바의 메서드(Method) (0) | 2024.01.21 |
자바의 연산자(Operator)-1 (0) | 2024.01.18 |
[JAVA]자료형 변환 (0) | 2024.01.18 |
자바의 입력(Input) , Scanner , BufferedReader (0) | 2024.01.18 |