단락회로평가
논리 연산자 사용 시, 연산 결과가 예상되는 경우에 뒤의 연산을 생략하는 것이 가능하여, 효율성이 좋다. 반면에, 비트 연산자(&, |)의 경우 단락회로 평가가 적용되지 않아 효율이 상대적으로 떨어진다.
if(조건 식) {
true 시 실행 코드.
}
if(조건 식){
true 시 실행 코드.
}else {
false 시 실행 코드.
}
if(조건 식1){
조건식 1이 true 시 실행 코드.
}else if(조건 식2){
조건 식 1이 false && 조건 식2 true인 경우 실행되는 코드.
}else {
모든 조건 식이 false인 경우 실행되는 코드.
}
switch(변수){
case 값 :
실행구문;
break;(탈출)
}
for(초기식; 조건식; 증감식){
반복 코드
}
while(조건식){
반복 코드
}
do{
반복 코드
}while(조건식)
Outer : for(int i = 0; i <= 10; i++){
for(int j = 0; j <= 10; j++){
if(조건식){
break Outer; // 외부 반복문 탈출
}
}
}
▶ 데이터 영역 / 스택 영역 / 힙 영역
데이터 영역 :
Java 실행 시 생성, 모든 스레드가 공유함.
클래스 로더에 의해 클래스가 로딩되는 영역.(클래스 영역)
클래스 로더에 의해 읽힌 클래스 내부의 정적 필드와 상수, 메서드 코드와 생성자 코드 등을 분류하여 저장하는 영역.(데이터 영역)
리터럴 풀(상수 풀)이 저장되는 영역도 존재하며, 프로그래밍 중 사용되는 모든 리터럴 값이 리터럴 풀에 저장되어 있다.(상수 영역)
정적(static) 자원은 클래스 로딩 직후 초기화 되어 정적으로 생성된다.(정적 영역)
스택 영역 :
지역 및 매개변수, 참조 변수 등은 스택에 쌓이고 사용이 끝나면 정리되어 사라진다.
힙 영역 :
객체 생성과 함께 생성되며, 참조 되지 않은 객체의 경우 GC에 의해 자동 삭제된다.
자바 변수의 자료형은 기본형과 참조형이 있다.
참조형 변수는 참조값(주소값)을 가리키는 변수를 의미한다.
실제 값은 (힙) 메모리 내부에 저장되어 있고 해당 메모리는 참조 변수에서 참조하고 있다.
참조 변수는 선언과 동시에 null 값이 담긴다. 이를 초기화 없이 사용할 경우, NullPointException이 발생하게 된다.
자바에서는 동일한 리터럴 값을 참조하는 두개 이상의 참조변수는 메모리를 효율적으로 관리하기 위해 동일한 메모리에 있는 리터럴 값을 참조하게 된다.
new 연산자는 힙 영역에 새로운 객체를 생성할 때 사용하는 연산자로 객체 생성 연산자를 의미한다.
String 객체 내부의 값을 비교해야하는 경우, equals() 메서드를 사용한다.
참조를 잃은 객체는 Garbage Collector에 의해 메모리에서 자동 제거된다.(Java 메모리 관리)
참조 변수의 ==, != 연산
메모리 주소값이 같아야 true 반환.
즉, true인 경우 두 참조 변수가 같은 메모리를 참조하고 있다는 것을 의미한다.