publicclassTest1 {
String a = "123";
publicstaticvoidchange(Test1 test){
test.a="abc";
}
publicstaticvoidmain(String[] args){
Test1 test1=new Test1();
System.out.println(test1.a); //123
change(test1);
System.out.println(test1.a); //abc
}
}
publicclassTest11 {
Stringa = "123";
publicvoid change(Test11 test) {
test = new Test11();
test.a = "abc";
}
publicstaticvoid main(String[] args) {
Test11test1= newTest11();
System.err.println(test1.a);//123
test1.change(test1);
System.out.println(test1.a);//123
}
}
publicclassTest2{
publicstaticvoid change(String str){
str = "abc";
}
publicstaticvoidmain(String[] args){
String str = "123";
System.out.println(str); //123
change(str);
System.out.println(str); //123
}
}
publicclass Test3{
publicstaticvoid main(String[] args) {
String[] strs ={"123","222"};
System.out.println(strs[0]);//123
change(strs);
System.out.println(strs[0]);//abc
}
publicstaticvoid change(String []strs){
strs[0] ="abc";
}
}
publicclassTest4a {
publicvoid testString() {
StringoriginalStr= "123";
System.err.println(originalStr);//123
changeNewString(originalStr);
System.out.println(originalStr);//123
}
publicvoid changeNewString(String original) {
original="abc"; //1
}
publicstaticvoid main(String[] args) {
Test4at = new Test4a();
t.testString();
}
}
publicclassTest4b {
publicvoid testString() {
StringoriginalStr= newString("123");
System.err.println(originalStr); //123
changeNewString(originalStr);
System.out.println(originalStr);//123
}
publicvoid changeNewString(String original) {
original.concat("haha"); //2
}
publicstaticvoid main(String[] args) {
Test4bt = new Test4b();
t.testString();
}
}
publicclassTest4c {
publicvoid testStringBuffer(){
StringBufferoriginalStr= newStringBuffer("123");
System.out.println(originalStr);//123
changeNewStringBuffer(originalStr);
System.out.println(originalStr);//123
}
publicvoidchangeNewStringBuffer(StringBuffer original) {
original = new StringBuffer("abc");//1
}
publicstaticvoid main(String[] args) {
Test4ct = new Test4c();
t.testStringBuffer();
}
}
publicclassTest4d {
publicvoid testStringBuffer(){
StringBufferoriginalStr= newStringBuffer("123");
System.out.println(originalStr);//123
changeNewStringBuffer(originalStr);
System.out.println(originalStr);//123abc
}
publicvoidchangeNewStringBuffer(StringBuffer original) {
original.append("abc"); //2
}
publicstaticvoid main(String[] args) {
Test4dt = new Test4d();
t.testStringBuffer();
}
}
这些个代码也是够了!!
网上看到一些代码,反复推敲了,才找到一个合理的思路。
传值可以很好的理解(引用也是值,地址的值,并且是放到方法的本地变量中),另外一个问题在于String和StringBuffer的赋值,以及String的concat以及StringBuffer的append方法的的实现。