关于JAVA函数调用时值传递还是引用传递的问题。
最近关于一个java引用传递的问题有点纠结
代码如下:
public class abc {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
classAbc abc = new classAbc("This is classAbc");
System.out.println("Class before edit: " + abc.getName());
editClass(abc);
System.out.println("Class after edit: " + abc.getName());
String abcString = new String("This is StringAbc");
System.out.println("String before edit: " + abcString);
editString(abcString);
System.out.println("String after edit: " + abcString);
}
public static classAbc editClass(classAbc abc)
{
abc.setName(abc.getName() + " edited. ");
return abc;
}
public static String editString(String abc)
{
abc = abc + " edited. ";
return abc;
}
}
class classAbc{
private String name;
public classAbc(String name)
{
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
执行结果:
Class before edit: This is classAbc
Class after edit: This is classAbc edited.
String before edit: This is StringAbc
String after edit: This is StringAbc
我的问题是,自己写的一个类,作为参数传递给函数的时候函数里对这个类的修改是全局的。就是改完后是全局生效的,即使我没有在调用处接受返回值。有点像C语言里的专递地址。这就是引用传递?
然而用java封装的String类做同样的操作确是局部的修改,就是调用的修改函数结束后修改的内容也丢失。调用处如果不接收返回值则对象不会被修改。这是值传递?
我同样做了int(原始类型)的试验,和String(引用类型)是一样的。
String不是一个类么。为什么跟我自己写的类结果不一样呢,求解?