java week3, 자바 데이터 타입, 변수 그리고 배열


목차



산술 연산자


산술 연산을 수행하는 연산자 산술 연산자의 종류

  • +, -, *, /, % 특히 나눗셈 연산자의 경우 두 피연산자가 정수인 경우에는 정수형 나눗셈이, 실수인 경우에는 실수형 나눗셈이 진행된다.

비트 연산자


각각의 비트를 대상으로 연산을 진행하는 연산자이며 피연산자는 반드시 정수이어야 한다.

연산자연산자의 기능방향
&비트 단위로 AND 연산을 한다.->
|비트 단위로 OR 연산을 한다->
^비트 단위로 xor 연산을 한다->
~피연산의 모든 비트를 반전시켜 얻은 결과를 반환한다.<-

비트 시프트 연산자


피연산자의 비트 열을 왼쪽 또는 오른쪽으로 이동시킨 결과를 반환하는 함수이다.

연산자연산자의 기능
<<피연산자의 비트 열을 왼쪽으로 이동한다. 이동에 따른 빈 공간은 0으로 채운다.
>>피연산자의 비트 열을 오른쪽으로 이동한다. 이동에 따른 빈 공간은 음수는 1, 양수는 0으로 채운다.
>>>피연산자의 비트 열을 오른쪽으로 이동한다. 이동에 따른 빈 공간은 0으로 채운다.

관계 연산자


두 개의 피연산자 사이에서 크기 및 동등 관계를 따져주는 이항 연산자이다. 관계연산자 종류 : <, >, <=, =>, ==, != 연산 결과에 딸서 true 또는 false를 반환한다.

    System.out.println("7.0 == 7 : " + (7.0 == 7)); // "7.0 == 7 : true "
                                                    // double형 자동 형변환

논리 연산자


논리식의 결과에 따라 true 또는 false를 반환하는 연사자이다.

논리 연산자 종류 : &&, ||, ! 논리 연산자의 연산 결과를 나타낸 표를 가리켜 진리표라고 하며, 이 진리표를 통해 연산의 결과를 확인할 수 있다.

피연산자1피연산자2연산 결과(&&)
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse
피연산자1피연산자2연산 결과(||)
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

주의점

public class Operator {
    public static void main(String[] args){
        int num1 = 0;
        int num2 = 0;
        boolean result;

        result = ((num1 += 10) < 0) && ((num2 += 10) > 0);
        System.out.println("num1: "+num1+" num2: "+num2 + " result: " + result);
        // 실행 결과: num1: 10 num2: 0 result: false
    }
}

((num1 += 10) < 0) && ((num2 += 10) > 0) && 진리표를 보면 피연산1이 false가 된다면 피연산자2의 논리결과와 상관없이 false가 된다. 그렇기 때문에 자바에서의 && 연산자는 피연자1를 보고 바로 false를 리턴함으로 피연산자2는 실행되지 않는다. 그렇기 때문에 num1 = 10, num2 = 0이 된다.

같은 이유로 만약 연산자이고 피연산자1이 true라면 바로 true가 리턴된다.

intanceof


참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instance of 연산자를 사용한다.

주로 조건문에 사용되며, instance of의 왼쪽에는 참조변수를 오른쪽에는 타입(클래스명)이 피연산자로 위치한다. 그리고 연산의 결과로 boolean값인 true, false 중의 하나를 반환한다. instance of를 이용한 연산결과로 true를 얻었다는 것은 참조변수가 검사한 타입으로 형변환이 가능하다는 것을 뜻합니다. [참고] 값이 null인 참조변수에 대해 instance of 연산을 수행하면 false를 결과로 얻는다.

class Parent {
    int num = 10;
    
    void printNum() {
        System.out.println(num);
    }
}
 
class Child extends Parent {
    int num = 20;
    
    void printNum() {
        System.out.println(num);
    }
}
 
public class ObjectCastTest {
    public static void main(String args[]) {
        Chaild chaild = new Chaild();

        if(chaild instanceof Parent){           //출력
            System.out.println("Parent");       //Parent
        }                                       //Chaild
        else if (chaild instanceof Chaild){     //Object
            System.out.println("Chaild");
        }
        else if(chaild instanceof Object){
            System.out.println("Object");
        }
    }
}

instnaceof 는 부모클래스 또한 true를 리턴한다.


대입 연산자


연산자 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입한다.


화살표( -> ) 연산자


자바에서 람다식을 사용할때 -> 연산자를 사용한다.

def(int test){
    print(test)
}
(x) -> {print(x)};

3항 연산자


조건식 ? 피연산자1 : 피연산자2 조건식의 연산결과가 true 이면, 결과는 피연산자 1이고, 조건식의 연산결과가 false 이면 결과는 피연산자2가 리턴된다.

int a = (5>4) ? 50 : 40;
//조건식이 true임으로 50이 대입된다.

연산자 우선 순위


기본적으로 연산자에는 우선순위가 있으며, 괄호의 우선순위가 제일 높고, 산술 > 비교 > 논리 > 대입의 순서이며, 단항 > 이항 > 삼항의 순서이다. 연산자의 연산 진행방향은 왼쪽에서 오른쪽으로 수행되며, 단항 연산자와 대입 연산자의 경우에는 오른쪽에서 왼쪽으로 수행된다.

그림


(optional) Java 13. switch 연산자


기존의 switch 구문에 expression을 추가하였다.

public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; }

// ...

public class Main {
  public static void main(String[] args) {
    int numLetters = 0;
    Day day = Day.WEDNESDAY;
    switch (day) {
      case MONDAY:
      case FRIDAY:
      case SUNDAY:
          numLetters = 6;
          break;
      case TUESDAY:
          numLetters = 7;
          break;
      case THURSDAY:
      case SATURDAY:
          numLetters = 8;
      case WEDNESDAY:
          numLetters = 9;
          break;
      default
          throw new IllegalStateException("Invalid day: " + day);
    }
    System.out.println(numLetters);
  }
}

Day day = Day.WEDNESDAY;
System.out.println(
      switch (day) {
          case MONDAY, FRIDAY, SUNDAY -> 6;
          case TUESDAY                -> 7;
          case THURSDAY, SATURDAY     -> 8;
          case WEDNESDAY              -> 9;
          default -> throw new IllegalStateException("Invalid day: " + day);
      }
);





© 2019.04. by salmon2

Powered by theorydb