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中只有值传递

  • 2014年07月21日 16:34
  • 2KB
  • 下载

Java 值传递Visio资源

  • 2016年05月13日 18:07
  • 350KB
  • 下载

Java中判断两个Date是否是同一天

Java中判断两个Date是否是同一天在Java中如何判断两个Data是否是同一天呢?你可以选择自己借助于Calendar来实现(如何实现,可以参考下面将分析的commons-lang包的isSame...

JAVA--第2周实验--用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:用户...

java html 值传递

  • 2014年05月21日 22:32
  • 562B
  • 下载

【Java编程】调用方法判断一个数是否是素数

调用方法判断1-1000之间有多少个素数,并且输出所有的素数。

java值传递与引用传递

  • 2012年12月24日 11:17
  • 12KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java是否是只有按值传递?
举报原因:
原因补充:

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