java是否是只有按值传递?

转载 2006年06月16日 15:14:00

2006-02-14 | java是否是只有按值传递。

public void call(Test t) {
Test t2 = new Test();
t2.setName("cba');
t.setName("abc");
t = t2 ;
}

public static void main(String[] arg) {
Test obj = new Test();
call (obj) ;
System.out.println("obj"+obj.getName());
}

Java方法调用的一切中心都是栈(Stack).
每一个方法调用都产生一个独立的栈桢(Stack Frame)。在方法调用开始的时候,会把操作数压栈,return的时候,如果有返回值,则把返回值压入调用者程序的栈。方法结束后其栈桢被销毁。

所谓的传值就是这样实现的。

进入call()方法后,t和t2都只是本地变量,t的引用值由调用者压栈。对t执行setName()显然仍然执行对原对象的调用。而最后t=t2是通过一次压栈和一次弹出完成的。但是请记住,这个栈桢在这一句后被立即销毁,不会对调用者的栈桢产生影响。

*java传递是引用拷贝,既不是引用本身,更不是对象。

可以通过方法来改变被引用的对象中的属性值,却无法改变这个对象引用(Object reference)本身.也就是当一个对象的实例被创建的时候,like this: Apple a = new Apple(); a 存的就是这个对象实例的地址。而这个地址,也就是a的值作为参数传到某个函数中的时候,a本身是不会改变的。

总结:
1:对于值类型的参数来说,传递的是值的拷贝.
2:对于引用类型的参数来说,传递的是引用本身的拷贝.
所以关键要看你如何理解传值中的这个“值”了。

Java只有一种参数传递机制------按值传递

Java中并没有传递引用这一说,只有一种参数传递机制,就是按值传递 首先,最主要要强调的一点就是,Java 应用程序有且仅有的一种参数传递机制,并没有传递引用这一说。造成这一误解,主要是因为有这么...
  • zlf4896
  • zlf4896
  • 2016年03月15日 17:42
  • 471

java中只有值传递没有引用传递

回顾下什么是指针、引用的初始化 int a = 0; int *p = &a;//指针 int &b = a;//引用(别名) 了解了指针和引用,看下面这个例子: /** * @author a...
  • u012582402
  • u012582402
  • 2016年02月23日 20:41
  • 563

Java-按值传递还是按引用传递详细解说

值传递:在方法进行调用时,形式参数是由实际参数来传递的,方法执行中形式参数值的改变不影响实际参数的值。 引用传递:就是地址传递。在方法进行调用时,实际参数的引用的是地址,而不是真正参数的值,方法执行...
  • yayun0516
  • yayun0516
  • 2015年05月27日 17:13
  • 1085

Java中只有按值传递

Java中只有按值传递,没有按引用传递!(两种参数情况下都是值传递) 今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,...
  • u010739551
  • u010739551
  • 2017年09月25日 16:49
  • 130

JS只有按值传递

按值传递 VS. 按引用传递 按值传递(call by value)是最常用的求值策略:函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。   按引用传递(call by refer...
  • charking_gg
  • charking_gg
  • 2017年01月05日 20:50
  • 189

按值传递(Byval)和按地址传递(ByRef)---参数传递

在接触了这么多的编程语言后,似乎每个语言都要涉及到参数的传递,而参数传递过程中的两种传递方式: ①按值传递   ②按地址传递 学到现在了,仔细想想还是很模糊,从开始接触C...
  • yudandan10
  • yudandan10
  • 2012年08月08日 11:25
  • 4159

对Java方法参数按值传递的理解

今天看到(Java核心计数)Java方法对参数按值传递的时候,居然怎么都想不通,故而自己写代码尝试了理解了一下: 定义一个Person类: class Person { private dou...
  • Mr_wenjian
  • Mr_wenjian
  • 2017年02月28日 22:37
  • 840

java中只有按值传递,没有按引用传递!

今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递?  我毫无疑问的回答:“引用传递!”,并且还觉...
  • junli_chen
  • junli_chen
  • 2015年09月25日 14:07
  • 228

澄清:Java中只有按值传递,没有按引用传递!

基本上可以说是按值传递.A) 对于primitive 类型的参数,大家都没有争议.B) 对于reference 类型的参数, 争议比较多.     b.1) 想要在一个子函数里,swap是不可能的. ...
  • samfang
  • samfang
  • 2011年03月13日 12:19
  • 601

【转】Java中只有按值传递,没有按引用传递!

今天无意中看到一篇关于Java中参数传递的文章,是让我一不小心就“怀疑世界”了,深感还是不能对自己太自信啊,也不能想当然,实践才是检验真理的唯一标准。...
  • qq_22804827
  • qq_22804827
  • 2016年07月15日 10:16
  • 252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java是否是只有按值传递?
举报原因:
原因补充:

(最多只允许输入30个字)