class prog {
static String display(String s)
{
s = "this is a test";
return s;
}
public static void main(String...args) {
prog p = new prog();
String s1 = "another";
System.out.println(display(s1)); //Line 1
System.out.println(s1);
}
}
一个新手问题。
有人可以解释为什么 s1 没有更新为“这是一个测试”吗?
我认为在 Java 中,对象参数作为引用传递,如果是这种情况,那么我在第 1 行中将 String s1
对象作为引用传递。
并且 s1
应该通过 display()
方法设置为“这是一个测试”。对吧?
最佳答案
Java 始终是按值传递。对于引用类型,它传递引用值的副本。
在你的
static String display(String s)
{
s = "this is a test";
return s;
}
String s
引用被重新分配,它的值被改变。被调用的代码不会看到此更改,因为该值是一个副本。
对于 String
,很难显示行为,因为它们是不可变的,但举个例子
public class Foo {
int foo;
}
public static void main(String[] args) {
Foo f = new Foo();
f.foo = 3;
doFoo(f);
System.out.println(f.foo); // prints 19
}
public static void doFoo(Foo some) {
some.foo = 19;
}
但是,如果你有
public static void doFoo(Foo some) {
some = new Foo();
some.foo = 19;
}
原始文件仍会显示 3
,因为您不是通过传递的引用访问对象,而是通过 new
引用访问它。
当然,您始终可以返回新引用并将其分配给某个变量,甚至可以是您传递给方法的同一个变量。
关于java - 将字符串对象作为参数传递 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662253/