목표
자바가 제공하는 다양한 연산자를 학습하세요.
학습할 것
산술 연산자
비트 연산자
관계 연산자
논리 연산자
instanceof
assignment(=) operator
화살표(->) 연산자
3항 연산자
연산자 우선 순위
(optional) Java 13. switch 연산자
연산자와 연산식
자바는 데이타를 처리하고 결과를 산출하는 과정을 연산(Operations)이라고 한다. 연산을 위한 연산자(operator)와 연산하는 대상으로의 피연산자(opreand)가 있다. 이러한 코드를 연산식(expression)이라 한다.
연산자의 종류에 따라 연산의 우선 순서와 방향이 차이를 가진다. 괄호 ()는 최우선 순위이므로 필요에 따라 적절하게 사용한다.
연산자는 다른 연산자를 합쳐서 하나의 새로운 연산자를 만들 수 있다(+, ++, <, <=)
연산자의 경우 단항연산자(!, --), 이항연산자(a+b), 삼항연산자(a?b:c) 등, 연산식에 사용하는 연산자의 갯수에 따라 구분한다.
산술 연산자
2.1 산술 연산자란
2.2 산술연산자의 오버플로우 방지
int a = 1000000000;
int b = 1000000000;
System.out.println(a*b); // -1486618624
if(a>=Integer.MAX_VALUE/b){
System.out.println("오버플로우 발생"); // 오버플로우 발생
}
2.3 산술연산자의 부동소수점 문제
System.out.println(7*0.1); // 0.7000000000000001
BigDecimal c = BigDecimal.valueOf(7.0);
BigDecimal d = BigDecimal.valueOf(0.1);
System.out.println(c.multiply(d)); // 0.70
2.4 NaN과 infinity, ArithmeticException
1/0 // ArithmeticException
1/0.0 // Infinity
1%0.0 // NaN
Double val = Double.valueOf("NaN"); // 컴파일 오류가 발생하지 않는다.
System.out.println(val+3); // NaN
if(val.isNaN()){
val=0.0;
}
System.out.println(val+3); //3.0
2.5 문자열 연결 연산자(+)
System.out.println(1+2+"번"); // 3번
System.out.println(1+(2+"번")); // 12번
0.1==0.1f // false
논리곱(AND) | &&,& | 좌항우항 모두 true |
논리합(OR) | ||,| | 둘 중 하나 혹은 양항 모두 true |
배타적논리합(XOR) | ^ | 양항 중 단 하나만 true |
논리부정(NOT) | ! | 피연산자의 논리값을 바꿈 |
System.out.println(Integer.toBinaryString(7)); // 111
System.out.println(Integer.toBinaryString(~7)); // 11111111111111111111111111111000
System.out.println(6^3); // 5
값 | 4 | 2 | 1 |
6 | 1 | 1 | 0 |
3 | 0 | 1 | 1 |
XOR(둘 중 하나만 true) | true | false | true |
값 : 5 | 1 | 0 | 1 |
System.out.println(Integer.toBinaryString(7<<3)); // 111000
double assign = 10.0;
System.out.println(assign+=10); // 20.0 (assign = assign + 10.0)
System.out.println(assign/=10); // 2.0 (assign = assign / 10.0)
String str = (10>6)?"10이크다":"6이크다";
System.out.println(str); // 10이크다
if(parent instanceof Child){
Child child = (Child) parent;
}
public interface TestInterface {
public void method(int x);
}
public class test {
public static void main(String[] args) {
TestInterface test;
test = x-> {
System.out.println(x*5);
};
test.method(5); // 25
}
}
백기선 개발자님의 LiveStudy를 진행 중입니다!
주요 참고자료는 <이것이자바다>, 신용권 입니다.