다음 Java 코드 세그먼트는 AP 컴퓨터 과학 실습 시험에서 나왔습니다.Java 문자열 변수 설정 - 참조 또는 값?
String s1 = "ab";
String s2 = s1;
s1 = s1 + "c";
System.out.println(s1 + " " + s2);
이 코드의 출력은 BlueJ에서 "abc ab"입니다. 그러나 가능한 대답 선택 중 하나는 "abc abc"입니다. 그 대답은 Java가 문자열 참조를 원시 타입 (값에 따라)으로 설정하는지 또는 객체 (참조로)와 같이 설정하는지에 따라 달라질 수 있습니다.
int s1 = 1;
int s2 = s1; // copies value, not reference
s1 = 42;
System.out.println(s1 + " " + s2); // prints "1 42"
을하지만, 우리가 균형을 잡고는 BankAccount 객체했다 말 :
더이 문제를 설명하기 위해 원시 유형의 예를 살펴 보자.
BankAccount b1 = new BankAccount(500); // 500 is initial balance parameter
BankAccount b2 = b1; // reference to the same object
b1.setBalance(0);
System.out.println(b1.getBalance() + " " + s2.getBalance()); // prints "0 0"
문자열에 어떤 것이 있는지 확실하지 않습니다. 그것들은 기술적으로 객체이지만, 컴파일러는 변수를 서로 설정할 때 원시 타입처럼 취급합니다.
자바가 원시 변수처럼 문자열 변수를 전달하면 대답은 "abc ab"입니다. 그러나 Java가 문자열 변수를 다른 객체에 대한 참조와 같이 취급하는 경우 대답은 "abc abc"가됩니다.
어느 정답으로 생각하십니까?
문자열에 대한 설명서를 보았습니까? 그것이 클래스인지 또는 원시인지 여부를 말합니까? – DJClayworth
질문에 대한 답변을 얻으려면 [javadoc] (http://download.oracle.com/javase/6/docs/api/java/lang/String.html)을 읽어보십시오. –
'System.out.println (s1 + ""+ s2); // prints "1 42"'사실이 아니다. 그것은 출력한다. ""42 1 "' – whytheq