Day 5

ChangWoo·2023년 4월 8일
1

자바의 정석

목록 보기
5/71

ch2-6 리터럴의 타입과 접미사

리터럴의 접두사와 접미사


L = Long
f = float
d = double (생략가능)

  • 접미사는 대소문자를 구별하지 않지만, 1과 혼동 가능하므로 대문자로 사용하는 것이 Best!
  • '\n' = 개행문자(줄바꿈 문자)
    • "문자" 여도 문자열이 된다.
  • byte b = 127; (int 타입이 된다. / byte와 short의 리터럴은 없으므로 int를 사용)
    • byte 는 -128 ~ 127 까지만 사용 가능하다.
    • 접두사도 대소문자를 구별하지 않는다.
  • int 타입은 최대 20억까지이므로 그 이상은 long 타입으로 담아야 한다.(끝에 접미사 L붙여야 한다.)
    • Ex) long l = 10_000_000_000L;
      long l = 100; // Ok(int의 최댓값을 넘지 않기 때문에 L 필요 x)
  • 실수형 역시 f와 d를 접미사로 붙인다.
    • Ex) float f = 3.14f; (f 생략 불가능)
      double d = 3.14d; (d 생략 가능)
      Quiz) 10. = 10.0(double) 뒤에 접미사가 없으므로
      .10 = 0.10(double) 뒤에 접미사가 없으므로
      10f = 10.0(float) 뒤에 접미사가 있으므로
      1e3 = 1000.0(e가 10의 n제곱이기 때문&실수형이기 때문에) / 접미사가 없으므로 double 타입이다.

변수와 리터럴의 타입 불일치

1. 범위가 '변수 > 리터럴' 인 경우, ok

  • Ex) int i = 'A'; // int > char (문자 'A'가 저장되는 것이 아니라, 문자 A의 문자코드인 65가 저장된다. / 저장하려는 것이 문자타입이지만 int타입이 더 크므로 가능하다.)
  • Ex) long i = 123; // long > int
  • Ex) double d = 3.14f; // double > float

2. 범위가 '변수 < 리터럴' 인 경우, 에러

  • Ex) int i = 30_0000_0000; // int의 범위(20억)에서 벗어남
  • Ex) long l = 3.14f; // long < float (long = 8byte, float = 4byte다. 그러나, 실수형이 정수형보다 저장범위가 더 넓기 때문에 에러 발생)
    Ex) float f = 3.14; // float < double

3. byte, short 변수에 int 리터럴 저장가능
단, 변수의 타입의 범위 이내이어야 함

  • Ex) byte b = 100; // ok, byte의 범위(-128 ~ 127)에 속함
  • Ex) byte b = 128; // 에러, byte의 범위를 벗어남

ch2-7,8 문자,문자열 리터럴,문자열 결합

문자와 문자열

  • char ch = 'A'; (문자는 홑따음표 / 캐릭터 변수)
  • char ch ='AB'; // 에러(두 개 이상의 문자 x)
  • String s = "ABC"; (2개 이상의 문자는 쌍따음표 / 스트링 변수)
    • String은 자바에서 제공하는 클래스다. / 문자열을 다룰 때 사용한다. / 원래 클래스를 사용할 때는 new를 붙여줘야 하지만, String은 기본형으로 사용가능하다.
    • 문자열 = 연속된 여러문자를 의미하지만,
      String s = "A"; (문자가 하나여도 ok)
      String s = ""; // 빈 문자열 (문자가 없어도 ok)
      String ch = ''; // 에러

문자열 결합

  • String s1 = "A" + "B" // "AB" (문자열을 하나로 결함하라는 뜻)
    • Ex) "" + 7 -> "" + "7" -> "7" (숫자를 문자열로 바꿀 수 있다.)
      "" + 7 + 7 -> "7" + 7 -> "7"+"7" -> "77"
      7+7+"" -> 14+"" -> "14"+"" -> "14:
      • 문자열 + any type -> 문자열
      • any type + 문자열 -> 문자열

ch2-9 두 변수의 값 바꾸기

두 변수의 값 교환하기

int x = 10, y = 20; 일 때, 두 변수의 값을 교환하기 위해

  • x = y; // y의 값을 x에 저장
    y = x; // x의 값을 y에 저장 하면, 두 변수의 값 모두 20이 된다.
  • 두 변수의 값을 바꾸기 위해서는 다른 변수 하나가 더 필요하게 된다.
    • Ex) int x = 10, y = 20;
      int tmp;
      tmp = x; // x의 값을 tmp에 저장
      x = y; // x의 값을 y에 저장
      y = tmp; // tmp의 값을 y에 저장

ch2-10 기본형과 참조형

값의 타입

  • 문자 -> char
  • 숫자 -> 정수 -> byte, short, int, long
    숫자 -> 실수 -> float, double
  • 논리 -> boolean
    * 이 8개의 type을 기본형이라 한다.

기본형과 참조형

  • 기본형
    - 오직 8개 (boolean, char, byte, short, int, long, float, double)
    - 실제 값을 저장
  • 참조형 (객체의 주소를 저장하기 위해 사용)
    - 기본형을 제외한 나머지 (String, System 등) / 무한개
    • 메모리 주소를 저장(4byte 또는 8byte)
    • 기본형이 나타낼 수 있는 메모리 주소는 각각마다 다르지만, 참조형은 항상 4byte다.
    • 4byte로 나타낼 수 있는 최댓값은 약 40억 정도이며, 4byte의 참조변수로는 4gb의 메모리를 다룰 수 있다. OS/JVM에서 사용하는 메모리를 제외화멱 약 2GB이다.
    • 32bit의 JVM에서는 4byte / 64bit의 JVM에서는 8byte의 참조변수의 크기를 가진다.
    • 64bit의 JVM은 40억*40억 = 160경 / 1600만 테라바이트이다.
    • Date today; // 참조형 변수 today를 선언
    • today = new Date(); // today에 객체의 주소를 저장 (new Date();라는 객체를 생성한헤서 참조변수 today에 저장한다. / 만일 생성된 객체의 주소대가 100번대라면, today는 100번대가 저장된다. / today라는 참조변수를 통해서 생성된 객체를 사용할 수 있다.)
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글