Post

Java 공부 (2)

Java 공부 (2)

Sparta Java handbook 학습으로, Java에 대한 기본 공부를 위한 필기입니다.

01. 연산자


  • 연산자 : 연산을 수행하는 기호
  • 피연산자 : 연산자의 연산 수행 대상
  • 모든 연산자는 연산 결과를 반환합니다.

  • 산술 연산자 : + - * / % « » : 사칙 연산과 나머지 연산(%)
  • 비교 연산자 : < > >= <= == != : 크고 작음과 같고 다름을 비교

두 피연산자를 비교해서 true(참) 또는 false(거짓)을 반환 문자열 비교에는 == 대신 equals()를 사용해야 합니다. – equals : 비교하고자 하는 두 피연산자의 값 자체를 비교 – == : 비교하고자 하는 두 피연산자의 주소값을 비교

  • 논리 연산자 : && ! &^ ~ : AND, OR로 조건을 연결
  • 대입 연산자 : = : 우변의 값을 좌변에 저장
  • 기타 연산자 : (type) ? : instance of
  • 조건 연산자 – 삼항 연산자 : 조건식 ? 반환값1 : 반환값2

  • 순위 : 산술 > 비교 > 논리 > 대입 : 대입은 제일 마지막에 수행됩니다.
  • 단항(1) > 이항(2) > 삼항(3) : 단항 연산자의 우선 순위가 제일 높습니다.

  • 증감 연산자(++) : 피연산자의 값을 1 증가 시킵니다.
  • 감소 연산자(–) : 피연산자의 값을 1 감소 시킵니다.

    타입설명사용 예
    전위형값이 참조되기 전에 증가/감소k = ++j; k=–j;
    후위형값이 참조되기 후에 증가/감소k = j++; k=j–;

02. 형변환


  • 형변환 : 변수 또는 상수의 타입을 변환하는 것을 의미합니다.
  • int -> char (char)65 -> A
  • float -> int (int)1.6f -> 1
  • 서로 다른 두 타입을 일치시키기 위해서 형변환을 하는데 형변환을 생략 하려면 컴파일러가 자동으로 형변환을 해줍니다.

    표현 범위가 좁은 타입에서 넓은 타입으로 형변환 하는 경우 값 손실이 없기에 두 타입 중에서 표현 범위가 더 넓은 쪽으로 형변환됩니다. - 큰 타입을 작은 타입에 저장할 때 Eror 발생 int i = 3.14f : Error int i = (int)3.14f

03. Math 클래스


  • Math는 수학과 관련된 메서드를 가지고 있는 클래스입니다.

  • round() : 실수를 소수 첫째 자리에서 반올림한 정수를 반환
  • ceil() : 올림값을 double 형으로 반환
  • floor() : 내림값을 double 형으로 반환
  • abs() : int, double 기본형 모두 사용 가능, 절대값을 얻음

04. 2진수 음수표현


  • 2진수 00000011 = 10진수 : 3
  • 2진수 10000011 = 10진수 : -3

  • 1의 보수 – 1의 보수는 11111111 - x 를 하는 방식 – 11111111 - x 는 x를 반전시킨 것과 같습니다.

    1이면 0, 0이면 1이됩니다.

  • 2의 보수 – 2의 보수는 100000000 -x를 하는 방식 – 가장 왼쪽 숫자가 0일 경우 양수, 1일 경우 음수를 표현합니다. – 1의 보수를 구한 뒤, 나온 수에 +1을 하면 됩니다.

    -9를 2의 보수로 표현 00001001(9) -> 11110110 11110110 + 1 => 11110111

05. Java와 C언어의 차이점


  • Java는 소스 파일을 하나만 작성하면 어디에서든지 사용 가능하고 C언어는 하나의 소스파일로 각 기계에 맞는 목적파일로 만들어 어디든 사용 가능합니다.

하나의 목적파일로 어디든 실행이 가능한가, 다수의 목적 파일을 만들어서 각 기계에 맞게 사용하냐의 차이점

  • Java는 반기계어인 바이트코드(.class)로 이는 OS가 아니라 JVM에서 사용됩니다.

  • 소스 코드를 바이트 코드로 컴파일 해주는 것이 자바 컴파일러(javac)입니다.

  • main 함수 작성

    – Java로 작성된 프로그램을 실행할 때는 main 함수로 진입하고 작성된 소스의 작업을 모두 수행하면 main 함수가 종료됩니다.

    System.out.println(출력값);은 콘솔에 값을 출력하기 위한 Java 함수입니다.

    IntelliJ에서는 sout라는 글자를 입력하면 System.out.println();을 자동으로 작성해줍니다.

06. String과 new String()의 차이점


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Hello {  
    public static void main(String[] args) {  
        String msg1 = "Hello";  
        String msg2 = "Hello";  
  
        String msg3 = new String("Hello");  
        String msg4 = new String("Hello");  
        String msg5 = new String("Hello").intern();  
  
        System.out.println(msg1==msg2);  //true
        System.out.println(msg3==msg4);  //false
        System.out.println(msg1==msg3);  //false
        System.out.println(msg1==msg5);  //true
  
        System.out.println(msg1.equals(msg3)); //true 
    }  
}
  • Java에서 문자열은 String Pool로 관리됩니다. “Hello”라는 두 개의 문자열 변수를 지정했지만 JVM Heap 메모리의 String Pool에는 “Hello”라는 문자열 하나만 존재합니다. 두 변수(msg1, msg2)는 reference로 가르키게 됩니다.

1

  • new 키워드는 Heap에 객체를 생성하게 됩니다.

2

  • intern() 메서드를 이용하면 String pool에 등록할 수 있습니다.

3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Hello {  
    public static void main(String[] args) {  
        String msg1 = "Hello";  
        String msg2 = "Hello";  
  
        String msg3 = new String("Hello");  
        String msg4 = new String("Hello");  
        String msg5 = new String("Hello").intern();  
  
        System.out.println(System.identityHashCode(msg1==msg2)); //1096979270  
        System.out.println(System.identityHashCode(msg3==msg4)); //1078694789  
        System.out.println(System.identityHashCode(msg1==msg3)); //1078694789  
        System.out.println(System.identityHashCode(msg1==msg5)); //1096979270  
  
        System.out.println(System.identityHashCode(msg1.equals(msg3))); //1096979270  
     }  
}

  • new로 생성한 객체의 경우는 HashCode 값이 다르지만 String Pool을 Reference 하는 경우는 같다는 것을 알 수 있습니다.
This post is licensed under CC BY 4.0 by the author.