boolean : 1비트의 정보를 표현하지만 사용하는 메모리의 크기는 정해져 있지 않다 기본값 false
정수 타입 8Bit -> 1Byte
자료형 크기(Bit) 값의 범위 기본값 Byte 8 -128~127 0 Short 16 -32,768~32,767 0 Int 32 -2,147,483,648~2,147,483,647 0 Long 64 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0 0 부동 소수접 타입
자료형 크기(Bit) 값의 범위 기본값 Float 32 1.4E-45 ~ 3.4028235E38 0.0f double 64 4.9E-324 ~ 1.7976931348623157E308 0.0d
자바의 데이터 타입은 크게 프리미티브 타입(원시 타입) 과 레퍼런스 타입 ( 참조 타입)으로 나눠진다
기본값은 null이 아니다 null을 넣고 싶다면 래퍼클래스를 사용
기본형을 제외하고 모두 참조형!
빈객체는 null
값이 저장된 힙 메모리의 주소값을 스택영역에 저장
레퍼런스 타입에는 (클래스 , 인터페이스, 배열 ,열거)타입을 갖는다.
static은 classArea에 저장, static 클래스는 힙에 저장되고 주소값 저장
상수와 리터럴 상수:는 변하지 않는 변수 final int a=1; 상수는 a
클래스도 상수로 만들 수 있지만 의미가 다르다 참조 변수 메모리의 주소값이 변하지 않는다는 의미지 그 주소가 가리키는 데이터들 까지 상수라는 의미는 아니다
리터럴: 변수에 넣는 변하지 않는 데이터 ex) int a= 1; 여기서의 리터럴은 1
종류는 (정수, 실수 , 문자 ,논리 ,문자열) 리터럴
인스턴스(클래스 데이터) 가 리터럴이 될 수 있을까 -> x
그럼 불변 객체는 무엇일까?
값객체안의 데이터는 변하지 않지만 변할 사황이 오면 새로운 객체를 만들기 때문이다.
가능한 선언과 동시에 초기화 해주는 것이 좋다.
Int a; a=10; 원시타입은 스택영역에 저장된다.
프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가진다. 그 범위를 변수의 스코프라고 한다.
변수가 선언된 블록이 그 변수의 사용범위이다. 전역변수와 지역 변수 가 있다.
전역변수 2가지로 나뉜다.
Ex) int global; // 전역변수 인스턴스변수
Static int staticGlobal; // 전역변수 클래스변수
클래스 영역에서 선언해 사용하면 전역이고 -> 클래스 전체에서 사용
클래스 안의 메소드에서의 변수 선언은 지역변수이다 ->메소드 블록 내에서 사용
- 지역변수
변수를 선언한 곳에서 생성되어 블록이 종료한 시점에서 삭제- 전역변수
인스턴스 변수: 인스턴스가 생성될 때 생성 -> 어플리케이션 종료시 삭제
클래스 변수: 클래스가 메모리에 올라갈 때 생성 -> 어플리케이션 종료시 삭제
자바에서는 동일한 데이터 타입에서만 연산이 가능하지만 다른 데이터 타입끼리의 연산을 할 수 있는 방법을 제시해 준다.
크기가 더 작은 자료형을 더 큰 자료형에 대입할 떄, 자동으로 작은 자료형이 큰 자료형으로 반환되는 것
Ex) int a=10; float b=a; 별다른 오류가 없다 float 범위가 int보다 크기 때문
크기가 더 큰 자료형을 더 작은 자료형에 대입할 때, 자료형을 명시해서 강제로 집어 넣는 것
Ex)float a=10; int b=a; 는 오류가 발생 -> int b=(int) a; 로 명시적 형변환을 해줘야 한다.
더 큰 것을 작은 곳에 넣기 때문에 데이터 손실이 일어날 수있다.
배열: 동일한 자료형의 데이터를 연속된 공간에 저장하기위한 자료구조
배열을 선언하면 stack영역에 heap영역의 주소값이 저장된다.
1차원 배열 선언 : int [] I = new int [3];
2차원 배열 선언 : int [][] I= new int [3][3];
타입 추론이란 코드 작성 당시 타입이 정해지지 않았지만, 컴파일러가 그 타입을 유추하는 것이다.
Java 9 이하에서도 generic, lambda 를 사용할 때 타입 추론이라는 말을 썼다.
Java 10 에서 var이라는 타입이 추가 되었다.
이 키워드는 lcal variable 이면서 선언과 동시에 초기화가 필수적으로 요구된다.
Ex) var message =“apple”;
주의 해야하는 부분
Var message=new ArrayList<>(); 는 오류