: static변수 = class변수 = 공유변수 = 정적변수
: 메모리 생성 시간차가 나기 때문
- 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.
- 메소드의 이름을 절약할 수 있다.
println
클래스(Static)변수
1. 같은 클래스들의 모든 인스턴스들이 공유하는 변수
2. 인스턴스 생성없이 클래스 이름.static변수명으로 접근 가능
3. 클래스가 로딩될 때 제일먼저 생성되며, 프로그램이 종료될 때 소멸
인스턴스(instance)변수
1. 각 인스턴스의 개별적인 저장공간
2. 인스턴스마다 다른 값으로 저장 가능
3. 인스턴스를 생성 후 참조변수.인스턴스 변수명으로 접근이 가능
4. 인스턴스를 생성할 때 생성되고 참조변수가 없을 때 가비지 컬렉터에 의해 자동 제거
지역(local)변수
1. 메소드 내 선언되며, 종료와 함께 소멸
2. 조건문과 반복문의 블럭{} 내에서 선언된 지역변수는 블럭을 벗어나면 소멸
for (int i = 0; i <= 10; i++)
Accumulator.add(i); // 전달되는 값을 모두 누적
Accumulator.showResult(); // 최종 누적 결과를 출력 sum = 55
class Accumulator {
private static int sum =0;
public static void add(int i) {
sum = sum + i;
}
public static void showResult() {
System.out.println("sum = " + sum);
}
}
public static void main(String[] args) {
Accumulator acc = new Accumulator();
for(int i= 0; i<= 10; i++) {
acc.add(i);
}
acc.showResult();
}
String str1 = "Simple String";
String str2 = "Simple String";
String str3 = new String("Simple String");
String str4 = new String("Simple String");
if(str1 == str2)
System.out.println("str1과 str2는 동일 인스턴스 참조");
else
System.out.println("str1과 str2는 다른 인스턴스 참조");
if(str3 == str4)
System.out.println("str3과 str4는 동일 인스턴스 참조");
else
System.out.println("str3과 str4는 다른 인스턴스 참조");
str1과 str2는 동일 인스턴스 참조
str3과 str4는 다른 인스턴스 참조
문자열 리터럴을 사용하여 String 인스턴스를 생성하면, 동일한 값을 가진 문자열을 참조하는 경우 동일한 인스턴스를 재사용한다.
srt1과 str2는 Immutable한 문자열을 참조하는 것이기 때문에, 내부 상태 변경이 불가능하며 변경시에는 새로운 인스턴스를 생성한다.
new String()을 사용하여 명시적으로 String인스턴스를 생성하는 경우에는 새로운 인스턴스가 생성되므로 str3과 str4는 다른 인스턴스를 가리킨다.