String 유형의 매개 변수, 전가 또는 전가 참조?
2011 단어 String
public static void main(String[] args) throws Exception {
String str="aaaaaaaa";
change(str);
System.out.println(str);
}
public static void change(String str){
str="bbbbbbb";
}
결과는 바뀐bbbbbbb가 아니라 aaaaa.
설명:
객체는 전달 참조(정확히 말하면 지침이어야 하며 Java에는 C의 의미에서 인용되지 않음)입니다. 그러나 인용이 String 객체라면 상황이 다릅니다. 왜냐하면 String이 만들어지면 바꿀 수 없기 때문에 이것이 관건(본질)이기 때문입니다.change 방법에서 이 방법의 국부 변수str에 값을 다시 부여할 때str가 가리키는 위치는 String 상량 탱크이기 때문에 바꿀 수 없기 때문에 새로운 String 대상만 생길 수 있다.change 방법의str는 새로운 대상을 가리키고main 방법의str변수는 이전에 발생한 대상을 가리킨다.
이것은 일반적인 인용과 다르다. 일반적인 인용은 가리키는 주소의 대상 값을 바꿀 수 있기 때문에 사람들이 같은 주소를 가리키면 모두 바뀐다.
String Buffer를 사용해 보십시오. 결과는 당신이 예상한 것과 일치할 것입니다.아래 코드
public static void main(String[] args) throws Exception {
StringBuffer str=new StringBuffer("aaaaaaaa");
change(str);
System.out.println(str);
}
public static void change(StringBuffer str){
str=str.replace(0, str.length(), "bbbbbbbb");
}
즉, 인용이 가리키는 주소의 내용을 수정하면 이 주소를 가리키는 모든 인용이 영향을 받는다. 이것이 바로 인용의 근본이다.
String s = ""방식으로 생성된 String 객체는 String 상수 풀에 들어가고 String 상수 풀에 있는 동일한 String 객체는 Copy 하나만 있기 때문에 public static void main (String []args)throws Exception {
String str1="aaaaaaaa";
String str2="aaaaaaaa";
System.out.println(str1==str2);
}
true를 내보냅니다.new String을 사용하면 일반적인 대상과 마찬가지로 일반적인 Heap에 있고 이 대상은 String 상수 탱크에 동시에 추가됩니다(검증이 잘 되지 않음).
public static void main(String[] args) throws Exception {
String str1=new String("aaaaaaaa");
String str2=new String("aaaaaaaa");
System.out.println(str1==str2);
}
false를 출력합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Access Request, Session and Application in Struts2If we want to use request, Session and application in JSP, what should we do? We can obtain Map type objects such as Req...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.