[Java] 자바 #6 연산자

연산자, Operator

- 피연산자(Operand)를 대상으로 미리 정해진 연산(계산, 행동)을 한 후에 결과값을 반환하는 역할(기호로 표현)

ex) int sum = 1+2+3-1;


1. 산술연산자

- +, -, *, /, %(나머지, mod)

- 피연산자의 개수 2개 -> 이항연산자


- 정수에서 정수를 나눔 => 정수

- 실수에서 실수를 나눔 => 실수.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class HelloWorld{
    public static void  main(String[] args){
        
        int a = 10;
        int b = 3;
        
        System.out.println(10 / 3);                    //[3]
        System.out.println(10.0 / 3.0);                //[3.33333333335]
        System.out.println((double) a / (double) b);//[3.33333333335]
        System.out.println(10.0 / 3);                //[3.33333333335]
        
        int n1=2100000000,n2=2100000000;
        int n3=n1+n2;
        
        System.out.println(n3);            //[-94967296] 범위초과
        System.out.println((long)n1+n2);//[4200000000]
 
    }
}
cs


2. 비교연산자

- >,<,>=,<=,==(equal),!=(notequal)

- 피연산자들의 비교우위를 반환하는 연산자

- 이항연산자

- 연산의 결과를 항상 boolean으로 변환

- 피연산자 : 숫자임

- 피연산자들은 서로의 자료형이 동일해야 한다.(형변환 가능하면 달라도 된다)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class HelloWorld{
    public static void  main(String[] args){
        int c=10;        int d=5;
        System.out.println(c>d);//true
        System.out.println(c<d);//false
        System.out.println(c>=d);//true
        System.out.println(c<=d);//false
        System.out.println(c==d);//false
        System.out.println(c!=d);//true
 
        //문자형(숫자)
        char c1 = 'B'// 66
        char c2 = 'C'// 67
        System.out.println(c1>c2);//false
 
        char c3='가';
        System.out.println((int)'a'>=(int)c3); //false
        System.out.println((int)'z'<=(int)c3); //true
 
        System.out.println('a'>=c3); //false
        System.out.println('z'<=c3); //true 
    }
}
cs


참조형 - String

- 문자열은 비교연산이 안된다.

- 단, ==와 !=은 사용이 가능하다.( 하지만 문자열 비교는 equals로 하도록 하자! ) 

- ==, != -> equals()메소드 제공


1
2
3
4
5
6
7
8
9
10
11
12
class HelloWorld{
    public static void main(String[] args) {
        String s1 = "홍길동";
        String s2 = "홍길동";
        String s3 = "홍";
        s3 = s3 + "길동";
 
        //System.out.println(s1>s2);
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The operator > is undefined for the argument type(s) java.lang.String, java.lang.String
        System.out.println(s1.equals(s2)); //true
        System.out.println(s3.equals(s2)); //true
    }
}
cs



3. 논리연산자

- &&(and), ||(OR), !(not)

- 피연산자를 가지고 특정 규칙에따라 정해진 결과값 반환

- &&(and), ||(OR) : 이항연산자

- !(not) : 단항연산자

- 피연산자는 반드시 boolean타입

- 연산의 결과로 boolean을 반환한다.


      A  &&  B     

T         T    T

      T         F    F

      F         T    F

      F         F    F


      A   ||    B     

T         T    T

      T         F    T

      F         T    T

      F         F    F


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class HelloWorld{
    public static void main(String[] args) {
        boolean b1= true;        boolean b2 = false;
 
        System.out.println();
        System.out.println(b1 && b2); // T && F = F 
        System.out.println(b1 || b2); // T || F = T
        System.out.println(!b1); // !T = F
 
        //논리연산의 피연산자 타입 -> boolean
        // -> 논리연산 + 비교연산
        
        //요구사항 : 나이제한 19세이상 60세 미만.
        int age =25//내나이가 25살인데.. 
        System.out.println(age>=19 && age < 60);
        
        
        //쇼핑몰(red, blue, yellow, white)
        String color = "black";//주문색상
        //내가 주문한 색상이 있는가??
        System.out.println(color.equals("red")||color.equals("blue")||
                           color.equals("white")||color.equals("yellow"));//재고색상
        //-> false    
    }
}
cs


4. 대입(할당) 연산자

- " = " 기호 사용

- += ,-+, %=, *=, /=

- LValue(변수) = RValue (상수,변수)

- 이항연산자

- LValue와 RValue의 자료형이 반드시 동일 -> 형변환 때문...

- 모든 연산자를 통틀어 연산자 우선순위가 가장 낮다. (문장내에서 가장 마지막으로 실행)

- 연산자 결합 방향(순서)이  오른쪽 ->(에서) 왼쪽 실행


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class HelloWorld{
    public static void main(String[] args) {
        //
        int _sum = 1+2+3;
 
        int p1=10,p2,p3;
        p2=p1;
        p3=p1;
 
        //+=
        int num =10;
        num+=1// = num = num + 1 ;
        System.out.println(num);//11
        
        //-=
        num-=1// = num = num - 1 ;
        System.out.println(num);//10
 
        
        num *= 2// = num = num * 2 ;
        System.out.println(num); //20
 
        num%=3// num = num % 3; -> num을 3으로 나눈 나머지를 num에 대입
        System.out.println(num); //2    
    }
}
cs


5. 증감연산자

- ++(증) , --(감)

- 단항 연산자 

- 피연산자의 값을 +1, -1

- 연산의 결과가 피연산자(원본)에게 영향을 미친다.

- 연산자 우선순위가 가장 높다. : 전위배치(++num)   -> *즉시 증가

- 연산자 우선순위가 가장 낮다. : 후위배치(num++)   -> *라인 변경되고 나서 증가.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class HelloWorld{
    public static void main(String[] args) {
        int num =10;        ++num; 
        System.out.println(num); //11
 
        boolean flag = false;
        flag = !flag;
        System.out.println(flag); //true
 
        num=10;
        --num;
        System.out.println(num);//9
 
        int result = 0;
        num=10;
        result = 20 + num++// 이 당시에 num++ 은 아직 num이 10일때 따라서 result = 30
        //여기와서야 num은 11로 증가한다.
        System.out.println(result); //30
 
        int o=10;
        System.out.println--- o-- ); // 9 - 9 = 0
        //--o 에서 9로 하나 감소하고 o--일때는 아직 o의 값이 9 이므로 9-9가 되서 0이나옴    
    }
}
cs



6. 조건연산자

- A ? B : C -> A가 true -> B / false -> C 반환.

- 삼항연산자

- A : boolean

- B, C : 상수 or 변수 or 표현식 -> 값

- B와 C는 자료형이 동일해야 한다. **

- 조건연산자 (if문 역할 유사)


1
2
3
4
5
6
7
8
9
10
11
12
13
class HelloWorld{
    public static void main(String[] args) {
        int age = 25;        String myGrade = age >=20 ? "어른" : "미성년자";
        System.out.println(myGrade);
        age = 9;
        //이런식으로도 가능!! -> 하지만 가독성이 떨어져 보일 수 있음(필자기준)
        myGrade = age >=20 ? "어른" : 
                    age>=17 && age<=19 ? "고등학생" :
                        age>=14 && age<=16 ? "중학생" :
                            age >=8 && age <=13 ? "초등학생":"미취학아동"
        System.out.println(myGrade);    
    }
}
cs


'프로그래밍 언어 > Java' 카테고리의 다른 글

[Java] 자바 #8 BufferedReader  (0) 2019.02.03
[Java] 자바 #7 에러 종류  (0) 2019.02.02
[Java] 자바 #5 Casting(형변환)  (0) 2019.02.02
[Java] 자바 #4 콘솔 입출력 해보기  (0) 2019.02.01
[Java] 자바 #3 Escape  (0) 2019.01.31

댓글

Designed by JB FACTORY