谁知道Java中参数是引用传递还是值传递?

 我来答
海同职坐标在线
2021-01-27 · 百度认证:上海海同优才教育培训有限责任公司
海同职坐标在线
向TA提问
展开全部

java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。 

如果参数是引用类型,传递的是该参量所引用的对象在堆中地址值的拷贝。

恬静忍刻粗
2016-11-26
知道答主
回答量:39
采纳率:0%
帮助的人:22万
展开全部
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不太熟悉,你可以上秒秒学了解下。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式