谁知道Java中参数是引用传递还是值传递?
2个回答
展开全部
Java总是值传递。看下面的示例:
public static void main( String[] args ){
Dog aDog = new Dog("Max");
foo(aDog);
if (aDog.getName().equals("Max")) { //true
System.out.println( "Java通过值传递。" );
} else if (aDog.getName().equals("Fifi")) {
System.out.println( "Java通过引用传递。" );
}
}
public static void foo(Dog d) {
d.getName().equals("Max"); // true
d = new Dog("Fifi");
d.getName().equals("Fifi"); // true
}
在示例中,aDog.getName()将返回”Max”。这里在声明aDog后,虽然调用了foo,并在foo中改变了aDog的值。注意我们在foo中用”Fifi”新声明了一个对象。如果aDog是引用传递,那么在main函数中aDog.getName返回就是“Fifi”,否则不是。所以Java是通过值传递的。
但需要注意的是,Java的值传递是指传递对象的指针是值传递,这可能会让新学者比较困惑,因为我们如果有一个“指针”,我们还是可以通过函数改变实参的值,下面的代码:
Dog aDog = new Dog("Max");
foo(aDog);
aDog.getName().equals("Fifi"); // true
public void foo(Dog d) {
d.getName().equals("Max"); // true
d.setName("Fifi");
}
在调用foo后,aDog的名字就变成了Fifi。所有在d上的操作都将作用到了aDog实参,除了new Dog(“xxx”)的操作,因为这样会改变指向aDog的指针,使形参d不再能改变aDog的值。要理解这些需要你有一定的基础,如果你对Java不太熟悉,你可以上秒秒学了解下。
public static void main( String[] args ){
Dog aDog = new Dog("Max");
foo(aDog);
if (aDog.getName().equals("Max")) { //true
System.out.println( "Java通过值传递。" );
} else if (aDog.getName().equals("Fifi")) {
System.out.println( "Java通过引用传递。" );
}
}
public static void foo(Dog d) {
d.getName().equals("Max"); // true
d = new Dog("Fifi");
d.getName().equals("Fifi"); // true
}
在示例中,aDog.getName()将返回”Max”。这里在声明aDog后,虽然调用了foo,并在foo中改变了aDog的值。注意我们在foo中用”Fifi”新声明了一个对象。如果aDog是引用传递,那么在main函数中aDog.getName返回就是“Fifi”,否则不是。所以Java是通过值传递的。
但需要注意的是,Java的值传递是指传递对象的指针是值传递,这可能会让新学者比较困惑,因为我们如果有一个“指针”,我们还是可以通过函数改变实参的值,下面的代码:
Dog aDog = new Dog("Max");
foo(aDog);
aDog.getName().equals("Fifi"); // true
public void foo(Dog d) {
d.getName().equals("Max"); // true
d.setName("Fifi");
}
在调用foo后,aDog的名字就变成了Fifi。所有在d上的操作都将作用到了aDog实参,除了new Dog(“xxx”)的操作,因为这样会改变指向aDog的指针,使形参d不再能改变aDog的值。要理解这些需要你有一定的基础,如果你对Java不太熟悉,你可以上秒秒学了解下。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询