package string_;
public class String01 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = str1;
System.out.println(str1);// "hello"
System.out.println(str2);// "hello"
str2 = "good";
System.out.println(str1);//str1未变化
System.out.println(str2);//str2变成"good"
A a = new A("ya", "bye");
System.out.println("-------");
System.out.println(a.str1);// "ya"
System.out.println(a.str2);// "bye"
a.exchange1(a.str1, a.str2);
//并未变化,传参机制,传过去的是a.str1和a.str2引用的字符串的引用
System.out.println(a.str1);// "ya"
System.out.println(a.str2);// "bye"
A a2 = new A("see", "you");
System.out.println("-------");
System.out.println(a2.str1);// "see"
System.out.println(a2.str2);// "you"
a2.exchange2();
//发生变化,说明对于对象的String成员变量,可以在该对象的方法内部修改
System.out.println(a2.str1);// "you"
System.out.println(a2.str2);// "see"
A a3 = new A("big", "apple");
System.out.println("-------");
System.out.println(a3.str1);// "big"
System.out.println(a3.str2);// "apple"
String temp = a3.str1;
a3.str1 = a3.str2;
a3.str2 = temp;
//发生变化,说明在外部,对于对象的String成员变量通过对象引用.成员变量可以更改
System.out.println(a3.str1);// "apple"
System.out.println(a3.str2);// "big"
}
}
class A {
String str1;
String str2;
public A(String str1, String str2) {
this.str1 = str1;
this.str2 = str2;
}
public void exchange1(String stra, String strb) {
String temp = stra;
stra = strb;
strb = temp;
}
public void exchange2() {
String temp = str1;
str1 = str2;
str2 = temp;
}
}
看看下面的两份代码
public class Test1 {
String str = new String("hsp");
final char[] ch = {'j', 'a', 'v', 'a'};
public void change(String str, char ch[]){
str = "java";
ch[0] = 'h';
}
public static void main(String[] args){
Test1 ex = new Test1();
ex.change(ex.str, ex.ch);
System.out.print(ex.str + " and ");
System.out.println(ex.ch);
//ex的str未变化,ch[0]变化了,输出结果应该如下
//hsp and hava
}
}
public class Test2 {
String str = new String("hsp");
final char[] ch = {'0', '0', '0', '0'};
public void change(Test2 ex1){
//main方法中的ex.str跟ex.ch[0]也会变化
ex1.str = "java";
ex1.ch[0] = 'p';
Test2 ex2 = new Test2();
ex2.str = "c++";
ex2.ch[0] = '2';
//ex1变了,ex却没变,但是ex2变化了
ex1 = ex2;//这行省略了的话main方法中的ex也会变化
ex1.str = "php";
ex1.ch[0] = '1';
System.out.print("ex1.str=" + ex1.str + " ex1.ch=");
System.out.println(ex1.ch);
System.out.print("ex2.str=" + ex2.str + " ex2.ch=");
System.out.println(ex2.ch);
}
public static void main(String[] args){
Test2 ex = new Test2();
ex.change(ex);
System.out.print("ex.str=" + ex.str + " ex.ch=");
System.out.println(ex.ch);
}
}