package javaapplication1;
public class PassString {
public static void main(String[] args) {
String name = "Shakespeare";
System.out.println("In main, the name is "
+ name);
changeName(name); // i don't get why we pass name as an argument
System.out.println("Back in main, the name is "
+ name);
}
public static void changeName(String str) {
str = "Dickens";
System.out.println("In changeName, the name " + "is now "
+ str);
}
}
我不明白在nameName方法中将name作为参数传递的目的。它与String name =“Shakespeare”有什么关系;
答案 0 :(得分:5)
示例(我相信)的目的是表明Java使用按值传递语义。
name
中main
变量的值(按值)传递给changeName
。它接收值作为参数str
的初始值。
然后将str
的值更改为对字符串“Dickens”的引用,并在方法结束时通过诊断验证该更改。
但是,当我们返回main
方法时,下一个诊断线显示name
的值未发生变化。如果Java使用了真正的pass-by-reference,那么更改str
也会更改name
- 但它没有,因为Java使用pass-by-value。
答案 1 :(得分:2)
这里的要点是,即使您将str
中changeName
的值更改为“狄更斯”,name
中的变量main()
也不会受到影响。
答案 2 :(得分:-2)
我不明白在nameName方法中将name作为参数传递的目的。
看起来您正在尝试更改name
变量的值。
你应该这样做:
// in main
name = changeName(name);
// see the change in signature
public static String changeName(String str)
{
String newName = "William " + str;
return newName;
}
为什么
name
的值不会改变?
Java是按值传递。
即。当您在name
方法中传递changeName
时,两个引用(name
和str
)指向同一个对象。后来str
指向其他一些对象。但name
仍然指向早期的对象。