자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익히기
종류 | 타입 | 기본 값 | 메모리 크기(byte) | 값의 범위 |
---|---|---|---|---|
논리형 | boolean | false | 1 | true, false |
정수형 | byte | 0 | 1 | -128 ~ 127 |
short | 0 | 2 | -32,768 ~ 32,767 | |
int(default) | 0 | 4 | -2,147,483,648 ~ 2,147,483,647 | |
long | 0L | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | |
char | ‘\u0000’ | 2 | 0 ~ 65,535 | |
실수형 | float | 0.0F | 4 | (3.4 10^-38) ~ (3.4 10^38) 의 근사값 |
double(default) | 0.0 | 8 | (1.7 10^-308) ~ (1.7 10^308) 의 근사값 |
int unsigned = Integer.parseUnsignedInt("21억과 42억 사이의 값");
System.out.println(Integer.toUnsignedString(unsigned)); // 21억과 42억 사이의 값
출처 : https://velog.io/@jaden_94/2주차-항해일지
리터럴 : 변수나 상수에 저장되는 값 그 자체
예) 10 in int a = 10
종류 : 정수 리터럴, 실수 리터럴, boolean 리터럴, 문자 리터럴, 문자열 리터럴
정수 리터럴
int decimal = 26; // 10진법
int binary = 0b10101; // 2진법, 앞에 0b를 붙인다.
int octal = 076; // 8진법, 앞에 0을 붙인다.
int hexaDecimal = 0x1a; // 16진법, 앞에 0x를 붙인다.
L
울 붙인다.실수 리터럴
double a = 0.1;
double b = 1E-1; // E는 10을 의미한다.
f
를 붙인다.booelan 리터럴
boolean a = true; // 참
boolean b = false; // 거짓
문자 리터럴
작은따옴표('
)안에 문자를 넣어 표현한다.
char a = 'a';
특수문자를 위한 리터럴도 존재한다.
특수문자 리터럴 | 의미 |
---|---|
‘\n’ | new line |
‘\r’ | carriage return |
‘\t’ | tab |
‘\b’ | backspace |
‘\f’ | form feed |
‘\”’ | double quote |
‘\’’ | single quote |
‘\’ | backslash |
‘\u유니코드’ | 유니코드(16진수 문자) |
문자열 리터럴
"
)안에 문자열을 넣어 표현한다.String a = "abc";
출처 : https://velog.io/@jaden_94/String-Class
new
연산자를 통해 String 객체를 생성한 다음 객체의 주소를 저장할 수도 있다.[변수 타입] [변수 이름];
int a; // a라는 이름으로 int타입의 변수를 선언한다.
[변수 이름] = [초기화 값];
a = 10; // a변수를 10으로 초기화한다.
int a, b;
int a = 0, b = 0;
class ScopeAndLifetime {
int a; //Instance Variables
static int b; //Class Variable
int add(int c, int d){ //Local Variables
return c+d;
}
}
- 지금부터 크기라고 하는 것은 데이터 크기(byte)가 아닌 표현할 수 있는 값의 범위를 뜻한다.
- Long(8byte)
👉 float(4byte) ❌- float((3.4 10^-38) ~ (3.4 10^38) 의 근사값)
👉 Long(-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807) ⭕
방법
= (타입)캐스팅 하고자 하는 변수나 리터럴
캐스팅 과정에서 데이터의 손실이나 변형이 올 수 있다.
// byte는 -256~255까지 표현할 수 있으므로, 캐스팅 했음에도 데이터 변형이나 손실은 오지 않았다.
int a = 10;
byte b = (byte)a;
System.out.println(b); // 10
// byte의 표현범위를 벗어나는 값을 강제로 캐스팅해 데이터에 변형이 생겼다.
int a = 10000;
byte b = (byte)a;
System.out.println(b); // 16
= 캐스팅 하고자 하는 변수나 리터럴
(타입)
을 적지않아도 된다. 타입[] 배열이름;
배열이름 = new 타입[길이];
배열이름[인덱스] = 값;
타입[] 배열이름 = {값1, 값2, ...};
타입[][] 배열이름; // 선언
배열이름 = new 타입[길이][길이]; // 생성
배열이름[인덱스][인덱스] = 값; // 할당
타입[][] 배열이름 = {{값1, 값2}, {값3, 값4}}; // 선언 및 초기화
var
라는 Local Variable Type Inference가 추가되었다.var
을 변수명으로 사용한 적이 있었다고 해도 이 기능에 대해 걱정하지 않아도 된다.var
는 keyword가 아닌 reserved type name이기 때문에 변수명으로 써도 컴파일에러가 발생하지 않는다.var a = 10; // int a = 10;
var b = "hello, world!" // String b = "hello, world!";
// before
URL url = new URL("https://www.oracle.com/");
URLConnection conn = url.openConnection();
Reader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
// after
var url = new URL("https://www.oracle.com/");
var conn = url.openConnection();
var reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
출처 : Java Language Changes for Java SE 10=
로 할당해주는 과정에서 어떤 타입이 저장될 지 확인할 수 있는데, 변수명 앞에 중복으로 타입을 적어주는 것은 코드량을 늘리는 일이다.var
로 선언이 가능하다.var foo = s -> System.out.println(s); // ❌
Consumer<String> foo = s -> System.out.println(s); // ⭕
Local variable delarations with initializers
var list = new ArrayList<String>();
Enhanced for-loop indexes
for(var i : list) {
System.out.println(i);
}
Index variables declared in traditional for loops
for(var i = 1; i < 10; i++) {
System.out.println(i);
}
Try-with-resources variable
try(var input = new FileInputStream("validation.txt")) {...}
람다 표현식안에서 키워드 앞에서 사용할 수 있는 어노테이션 사용
// before
Consumer<String> foo = s -> System.out.println(s);
// after
Consumer<String> foo = (@Notnull var s) -> System.out.println(s); // ⭕
Reference