1. 아래의 Accumulator를 완성하시오.
for (int i = 0; i <= 10; i++)
Accumulator.add(i);
Accumulator.showResult();
class Accumulator{
private static int sum;
public static void add(int i) {
sum += i;
}
public static void showResult() {
System.out.println("최종 값 : " +sum);
}
}
public class ClassMethod {
public static void main(String[] args) {
for (int i = 0; i <= 10; i++)
Accumulator.add(i);
Accumulator.showResult();
}
}
최종 값 : 55
2.아래의 결과를 예측하고, 이유를 설명하시오.
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는 다른 인스턴스 참조");
- literal로 대입한 str1과 str2은 먼저 "Simple String" 이라는 문자열을 method 영역의 constant pool에 올린다. 그리고 나서 str1에 주소값을 넣고 str2에도 literal로 대입했으니 constant pool에
Simple String"에 해당하는 주소값을 넣는다.
- new로 생성한 객체는 heap영역에 객체를 하나씩 따로 생성하면서 str3과 str4에 각각 주소를 집어 넣는다.
- 그렇기에 str1과 str2는 같은 주소값을 가지고 str3과 str4는 다른 주소값을 가진다.
public class ImmutableString {
public static void main(String[] args) {
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는 다른 인스턴스 참조