JAVA/수업 복습

자바 공부 기록07 - 연산자 (1)

본이qq 2022. 4. 4. 21:21

●연산자
산술 - 사(오)칙연산자 : +,-,/,*,%
관계연산자-비교연산자 : >,<,>=,<=,==,!=
논리연산자 : &&(And), ||(Or), !(Not)

 

 

 

 

 

 

 

 

●피연산자로 쓰인 변수와 연산의 결과를 저장할 변수가 같은 연산

1
2
3
4
5
6
public class Operator01 {
 
    public static void main(String[] args) {
            int n = 50;
            n = n + 10;
            System.out.println("n = n + 10 -> n : " + n);
cs

1. 현재 n값(50)과 두번째 피연산자인 10이 CPU로 전달되어 덧셈됩니다.
2. 연산결과가 다시 돌아와서 다시 n 변수에 저장됩니다
연산에 참여했던 n값 50은 사라지고, 연산의 결과인 60이 n변수에 남습니다.
간략하게 다음과 같이도 사용합니다. n+=10;

 

 

3.다른 사칙연산 활용의 예

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Operator01 {
 
    public static void main(String[] args) {
        int n = 50;
        n = n + 10;
        n=n-10//n-=10;        
        System.out.println("n = n-10 -> n : " + n);
        n=n*10//n*=10;
        System.out.println("n = n*10 -> n : " + n);
        double d = 50.0;
        System.out.println("d의 최초값 : " + d);
        d = d/10.0//d/=10;
        System.out.println("d = d/10 -> d : " + d);
        n=n%7//n%=7;
        System.out.println("n = n%7 -> n : " + n);
cs

 

 

 

●특정 변수의 값을 1 증가하거나, 감소시킬 수 있는 연산자

    n = n + 1 , n += 1 , n++

    n = n - 1 , n -= 1 , n--

   위와 같은 단항연산일때는 ++나 --를 앞 또는 뒤에 어느곳에 붙여도
   똑같이 연산됩니다.

 

 

 

●++,-- 연산기호가 앞 또는 뒤에 있을때 차이가 나는 경우는 다른연산에 섞여 있을때이다.

 

1
2
3
4
5
6
7
public class Operator01 {
 
    public static void main(String[] args) {
         int n = 10;
         int k = n++;
         System.out.println("k : " + k);  //10 출력
         System.out.println("n : " + n); //11출력
cs

      <++,--연산이 뒤쪽에 있는 경우 : 현재값으로 속해있는 연산에 참여후, 1증가>

 

 

 

1
2
3
4
5
6
7
public class Operator01 {
 
    public static void main(String[] args) {
         int n = 10;
         k = ++n;
         System.out.println("k : " + k);  //11 출력
         System.out.println("n : " + n); //11출력
cs

    <++,--연산이 앞쪽에 있는 경우 : 1증가 후 , 다른 연산에 참여 >

    

 

 

 

 

 

 

●관계연산자(비교연산자)
   좌항기준 >(초과), <(미만), >=(이상≥), <=(이하≤), ==(같다), !=(같지않다)
   좌항과 우항의 크기를 비교하여 true/false 값이 결과가 되는 연산
   관계식이 올바른 경우 true, 관계식이 틀린 경우 false가 연산의 결과가 됩니다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Operator01 {
 
    public static void main(String[] args) {
        int n1 = 10;        
        int n2 = 5;
        boolean result;
        //n1은 n2보다 크다 - 맞으면 true, 틀리면 false
        result = n1 < n2;
        System.out.printf("%d < %d -> %b\n", n1,n2,result);
        result = n1 >= n2;
        System.out.printf("%d >= %d -> %b\n", n1,n2,result);
        result = n1 <= n2;
        System.out.printf("%d <= %d -> %b\n", n1,n2,result);
        result = n1 == n2;
        System.out.printf("%d == %d -> %b\n", n1,n2,result);
        result = n1 != n2;
        System.out.printf("%d != %d -> %b\n", n1,n2,result);
cs

 

 

 

●문자(char) 데이터의 바교 : 각 데이터가 갖는 아스키 코드 값으로 비교

1
2
3
4
5
6
7
8
9
public class Operator01 {
 
    public static void main(String[] args) {
        char c1='A', c2 = 'B';        
        result = c1 > c2;
        System.out.printf("%c > %c -> %b\n",c1, c2, result);
        
        result = c1 < c2;
        System.out.printf("%c < %c -> %b\n",c1, c2, result);
cs

 

●String 데이터의 비교

 String을 대상으로 할 수 있는 비교연산은 ==와 != 둘 밖에 없으며 에러없이 가능은 하지만 이도 사용은 하지 않습니다.

String 자료간의 비교는 별도로 만들어져 있는 도구를 이용합니다.

//String 의 크다 작다를 판단해주는 compareTo()

// String 의 같다 다르다를 판단해주는  equals()

 

 

-compareTo()

 

1
2
3
4
5
6
7
public static void main(String[] args) {
        String s1 = "1234", s2 = "987";
        
        int r = s1.compareTo(s2);
        System.out.printf("%s > %s => %d\n", s1, s2, r);
        r = s2.compareTo(s1);
        System.out.printf("%s > %s => %d\n", s2, s1, r);
cs

앞글자(s1)에서 뒷글자(s2)의 아스키 코드 값을 뺄셈한 결과를 얻는다.

이 경우에는 s1보다 s2가 더 큼

따라서 첫번째 출력값은 -8 , 두번째 출력값은 8이다.

 

 

 

 

--->boolean으로 true/false값 출력하기

1
2
3
4
5
6
7
public static void main(String[] args) {
        String s1 = "1234", s2 = "987";
        
        
        int r = s1.compareTo(s2);        
        System.out.printf("%s > %s =>%b\n", s1, s2, r>0);
        System.out.printf("%s > %s =>%b\n", s2, s1, r<0);
cs

s1에서 s2를 뺀 값은 음수이므로, 첫번째 값은 r > 0이라고 했으므로 false, 두번째 값은 r<0이라고 했으므로 true이다

정확한 출력값은 아래와 같다.

 

 

 

 

-equals()

1
2
3
4
5
6
7
8
public static void main(String[] args) {
        String s1 = "1234", s2 = "987";
 
        boolean b = s1.equals(s2); // 둘이 같으면 true, 다르면  false
        System.out.printf("%s == %s => %b\n", s1, s2, b);
        
        b = s1.equals("1234");
        System.out.printf("%s == %s => %b\n",  s1, "1234", b);
cs

첫번째 값은 false, 두번째 값은 true