본문 바로가기
개발/자바

Java 연산자

by mabyoungg 2023. 4. 25.

Java 연산자
모든 연산자는 연산결과를 반환한다
즉 연산결과를 반환하지 않으면 연산자가 아니다. 괄호는 연산자가 아님

1)

연산자 우선순위
산술-비교-논리-대입
단항-이항-삼항
단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽

2)

증감 연산자 ++, 감소 연산자 --
증감 연산자가 독립적으로 사용된 경우 전위형과 후위형 차이가 없다.
부호 연산자 -는 부호 반대로 변경, +는 아무 의미 없다.

3)

자동 형변환시 값 손실이 발생하면 컴파일러가 자동으로 형변환을 안 해줌.
좁은 타입에서 넓은 타입으로 변환하는 경우 더 넓은 쪽으로 변환

 

4)

Math 클래스

class Math_ex {
    public static void main(String[] args) {
        double num = 3.14;
        
        System.out.println("반올림" + Math.round(num)); // 3
        System.out.println("올림" + Math.ceil(num)); // 4.0
        System.out.println("내림" + Math.floor(num)); // 3.0
        System.out.println("절대값" + Math.abs(num*-1)); // 3.14
    }
}

 

5)

문자열 비교
문자열 비교에는 == 대신 equals() 사용
==는 주소값 비교, equals 값 자체 비교

리터럴로 생성하면 변수는 stack 메모리, 값은 Heap 메모리 내에 String pool에 저장되고 그 주소가 변수에 저장, 같은 값이 존재하면 기존 값의 메모리 주소를 리턴, 다른 값일 경우 새로운 객체 생성 후 값 저장하고 새로운 주소 리턴

String pool은 HashMap 자료구조 형태이기 때문에 중복된 데이터가 저장되지 않아 동일한 문자열인 경우 같은 메모리 주소를 갖게 된다.

 

new 연산자를 사용하여 생성하는 경우 변수는 stack 메모리에 저장되지만 값은 일반 Heap 메모리 내에 생성. 그래서 new 연산자를 사용하여 객체를 생성하면 계속 새로운 instance 생성

class String_ex {
    public static void main(String[] args) {
        String s1 = "코드";
        String s2 = "코드";

        System.out.println(s1 == s2);  // true
        System.out.println(s1.equals(s2)); // true

        String s3 = new String("코드");
        System.out.println(s1 == s3); // false
        System.out.println(s1.equals(s3)); // true
    }
}

 

6)

논리 연산자 
&&: AND 모두 참이면 참 반환
||: OR 하나라도 참이면 참 반환
!: NOT 결과가 참이면 거짓, 거짓이면 참

비트 연산자
&: AND 대응되는 비트가 모두 1이면 1 반환
|: OR 하나라도 1이면 1 반환
^: XOR 서로 다르면 1 반환
~: NOT, 1의 보수, 1이면 0, 0이면 1
<<: left shift 명시된 수 만큼 전부 왼쪽 이동
>>: right shift 부호를 유지하면서 명시된 수만큼 전부 오른쪽 이동
>>>: 명시된 수 만큼 오른쪽으로 이동, 새로운 비트는 0
 
2진수의 음수표현
부호 절대값: 가장 왼쪽에 있는 비트는 부호 비트, 0 양수, 1 음수
1의 보수: 11111111 - x,  x를 반전
2의 보수: 100000000 - x, 1의 보수를 구한 뒤 + 1

조건 연산자
삼항 연산자: 조건식 ? 반환값1 : 반환값2

'개발 > 자바' 카테고리의 다른 글

쉽게 배우는 자바1 메모  (0) 2023.05.30
Java 객체지향  (2) 2023.04.29
Java 배열  (0) 2023.04.27
Java 조건문과 반복문  (0) 2023.04.26
Java 변수  (0) 2023.04.25