JAVA/자바의 정석

[자바의 정석 - 기초편] 2. (1) 변수 / 상수 / 리터럴 / 문자열

서영22 2023. 11. 24. 01:38

< ch2_1~11 >

 

 

ctrl+shift+L 단축키 전체 목록 보기
ctrl+ +,- 폰트 크기 증가/감소
ctrl+D 한줄 삭제
ctrl+alt+shift+down 행단위 복사
alt+shift+A 멀티컬럼 편집
alt+up/down 행단위 이동
ctrl+i 자동 들여쓰기
ctrl+space 자동 완성 (sysout...)
ctrl+/주석

 

 


변수 (Variable) : 하나의 값을 저장할 수 있는 메모리 공간 (변경 O)

변수의 선언 이유 : 값을 저장할 공간을 마련하기 위해

 

 

- 클래스 변수

- 인스턴스 변수

- 지역 변수 - 읽기 전에 꼭! 초기화 해야 함

 

 

< 값의 타입 >

1. 기본형 (Primitive type) - 실제 값을 저장

문자 = char : 변수당 하나의 문자 (여러문자-String)
숫자 (정수) = int(디폴트), long, byte(이진 데이터, -128~127), short
숫자 (실수) = float, double(디폴트)
논리형 = boolean : true/false 둘중 하나의 값
종류 \ 크기 1 byte (8bit) 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

* 1 bit = 2진수 1자리

* 1 byte = 8 bit

 

S (부호) 1bit M (가수)

n 비트로 표현할 수 있는 값의 개수 : 2^n

n 비트로 표현할 수 있는 부호없는 정수(양수 1부터 2^n) 의 범위 : 0 ~ (2^n)-1 

n 비트로 표현할 수 있는 부호있는 정수(양수, 음수) 의 범위 : -2^(n-1) ~ (2^(n-1))-1 

 

S (부호) 1bit E 지수 (8) M 가수 (23)

- float : 1+8+23 = 32bit = 4byte (정밀도 7자리)

- double : 1+11+52 = 64bit = 8byte (정밀도 15자리)

 

 

Ex)

   > Byte의 경우 : -2^7 ~ (2^7)-1 : -128~127

0 (양수)              

                                 0 ~ 127 (128개)

1 (음수)              

                                 -1 ~ -128 (128개)

 

   > short의 경우 : -2^15 ~ (2^15)-1 → 부호있는 범위

   > char의 경우 :0 ~ (2^16)-1 → 부호없는 범위

 

 

2. 참조형 (Reference type) - 객체의 주소를 저장 (4byte or 8byte)

기본형 8가지를 제외한 나머지 (String, System 등)

Date today;   // 참조형 변수 today 선언
today = new Date();   // today에 객체의 주소 저장

 

 

상수 (Constant) : 값을 한번만 저장 가능한 변수 (변경 X)

" final " 붙이면 상수 처리되어 값 변경 불가능

값 변경하여 에러 발생

 

리터럴 (Literal) : 그 자체로 을 의미하는 것

종류 리터럴 접미사
논리형 false, true 없음
정수형 123, ob0101(2진 접두사), 100L L
실수형 3.14, 1.4f, 0x1.0p-1 f, d
문자형 'A', '1', '\n (줄바꿈)' 없음
문자열 "ABC", "123", "A", "true" 없음

 

EX)

boolean power = true;

char ch = 'A';

String str = "ABC";

byte b = 127;

byte b = 128; // 에러 (byte는 -128~127)

int i = 100;           // 10진수

int oct = 0100;     // 8진수

int hex = 0x100;  // 16진수

long I = 10_000_000_000L; // (100억) int 최대가 약 20억이기 때문에 long 타입 값으로 작성

long I = 100(L 생략 가능); // long 타입 값 or int 타입 값 둘다 가능

float f = 3.14f; // f 생략하면 double 타입 값이 됨. 근데 float 타입 변수에 double 타입 값을 못 넣음

double d = 3.14(d 생략 가능);

 

실수형 리터럴

10.
   →  10.0
.10   →  0.10
10f   →  10.0f
1e3  →  1000.0  ( e = 10의 n승)

 


< 변수리터럴 타입 불일치  >

1. 범위가  변수 > 리터럴  인 경우 OK
     int i = 'A';                // int > char

     long I = 123;          // long > int

     double d = 3.14f;   // double > float

 

2. 범위가  변수 < 리터럴  인 경우 ERROR

     int i = 30_0000_0000;    // int의 범위(+-20억) 벗어남

     long I = 3.14f;                 // long < float

     float f = 3.14;                  // float < double

 

3. byte, short 변수int 리터럴 저장 가능

     byte b = 100;   // byte 범위(-128~127)에 속함

     byte b = 128;   // byte 범위를 벗어남

 

 

 


 문자와 문자열 

String s = "";   // 빈 문자열

String s = '';    // 에러

String s1 = "A" + "B"; // "AB"

 

 

숫자를 문자열로 변환하는 방법  (왼쪽에서 오른쪽으로 결합)

문자열 + any type  →  문자열
any type + 문자열  →  문자열

 

"" + 7    "" + "7"   "7"

"" + 7 + 7  →  "7" + 7   →  "7" + "7"  →  "77"

7 + 7 + ""  →  14 + ""  →  "14"