这个JAVA程序结果???

来源:百度知道 编辑:UC知道 时间:2024/06/17 19:24:47
程序如下:
public class Test{
protected void changeStr(String string){
string="bye bye";
}
public static void main(String [] args){
String str=new String("Welcome to Java!");
System.out.println(str.toString());
}
}

根据我的分析,String是一个类,用其做参数,则是引用传递,那么在函数中改变它,函数外其值也会改变,但为什么打印出的还是Welcome to Java!呢??
知道的请说下,谢谢了
没贴上,打印之前应该是加一句
changeStr(str);就是
public class Test{
protected static void changeStr(String string){
string="bye bye";
}
public static void main(String [] args){
String str=new String("Welcome to Java!");
changeStr(str);
System.out.println(str.toString());
}
}

按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

不管是在c/c++中还是在java函数调用都是传值调用,.
当参数是对象的时候,传递的是对象的引用,这个和c/c++传递指针是一个道理,在函数中改变引用本身,不会改变引用所指向的对象

public class Test{
public String string;
protected static void changeStr(String string){
this.string=string;
}
public static void main(String [] args){
String str=new String("Welcome to Java!");
changeStr(str);
System.out.println(str.toString());
}
}

这个问题问得太好了,我一直以为String是类型应该是引用传递,今天试了一下你这个程序发现确实不对,我想这里只能用值传递来解释它了。也许在Java中因为String用得太普遍,而且它又不是基本数据类型而没有基本数据类型的优势,所以sun公司把String类型的参数处理也改成了同基本数据类型一样的了从而使得String有基本数据类型的优势吧。基本数据类型用值传递,对象用引用传递这一规则始终是死的,因为String类的特殊性应该可以改改,再怎么说规矩是人定的嘛,符合人情的规则才能更好的被接受。
总的来说这个问题很好,顶!

String确实是一个类 但是在Java中是一个特殊的类 可以看做是基本类型
就像楼上所说的 每次对String的改变其实都是新建了一个String对象

当然 你的问题和这个其实完全没关系。。。 你根本没有调用changeStr这个方法 哪来改不改变一说