☕ Java

    참조 타입, 참조 타입은 메모리에 어떻게 저장이 될까?

    참조 타입 간단하게 말하면 내가 생성하는 모든 클래스가 참조 타입. 자바 자체에 정의 된 클래스도 있다. 대표적으로 String, String도 참조 타입이다. 더보기 String의 길이를 알 수 있는 length()에 ()를 붙이는 이유 String s = "test";하고 나서 s의 길이를 알고 싶다면 어떻게 할까? length()를 쓴다. s.length() < 이 소괄호는 내가 생성한 클래스를 인스턴스화 하고 생성한 클래스의 메소드를 호출할 때 처럼 ()을 사용한다. = String은 Class이다. 내가 생성하는 클래스(참조 타입)로 인스턴스를 만들어 변수를 정의하면 참조 변수가 된다. 참조 타입은 메모리에 어떻게 저장이 될까? 자바 프로그램이 실행될 때 2가지 종류의 메모리가 있는데 Stack..

    이진 숫자 승격 (binary numerical promotion)

    정숫값으로 평균을 구하고 실수로 평균을 출력하려고 하는데 소수점자리가 나오지 않는다. 동일 형의 연산 정수를 받아서 합계를 구하면 합계는 정수, 즉 int + int + int = int. 이 상태에서 나누기를 한다면 여전히 .뒤에 소수점이 없는 double이 나오게 된다. 이진 숫자 승격 double / int 아니면 int / double하면 어떻게 될까? System.out.println(25.0 / 3) // 8.333333 System.out.println(25 / 3.0) // 8.333333 나눗셈이 이루어지기 전에 int형은 double형으로 격상된다. 이렇게 암묵적으로 이뤄지는 형 변환을 이진 숫자 승격이라고 한다. 피연산자의 자료형이 서로 다를 때 자료형이 작은(덜 구체적인) 피연산자는..

    char

    char 타입 작은 따옴표 사이에 하나의 문자만. 문자는 각각 유니코드 값을 갖고 있다. // 쌍따옴표의 유니코드는 u0022 char c = '\u0022'; // " 유니코드로도 char형 변수를 만들 수 있다. char ch = 65; // A ch++; // B 문자에 유니코드값이자 아스키값으로도 char타입을 선언, 정의할 수 있다. 정수처럼 연산도 가능. char ch = 65; // A ch + 5; // 70 정수를 같이 연산하면 정수로 출력된다. int는 4byte, boolean은 2byte. 정수의 크기가 더 크기 때문. char ch = 65; // A ch++; // B int b = (int) ch; // 66

    boolean, XOR 연산자, &&와 &의 큰 차이점

    boolean 리터럴은 false, true. 대소문자에 민감하기 때문에 소문자로 작성해야 한다. XOR 연산자 ^로 사용하는데 양쪽의 값을 비교해서 같은 값이면 false, 다른 값이면 true로 리턴한다. true ^ false = true; false ^ true = true; true ^ true = false; false ^ false = false; &&와 &의 큰 차이점 &&는 단축 회로 연산자다. int i = 10; int j = 10; j > 15 && i++ > 5; // false System.out.println(i); // 10 System.out.println(j); // 10 // 뒤의 식에는 후위 증감 연산자가 있어서 // 값을 다시 출력해보면 +1인 11이 출력되어야 하는..