地址传递的问题 应该说,楼主一开始的结论就是错误的。可以把引用类型看作一个C/C++中的指针,它指向的是一个Java对象的内存地址。但是当函数调用时,JVM会生成第二个引用,并将原始引用的值(对象的内存地址)copy给第二个引用。函数内部使用的是第二个引用的值,改变的也是第二个引用的值,而原始引用的值一直没有改变。记住,Java函数中参数的传递方式只有一种:值传递。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对象的产生。String str = null ;对象的声明。new String("str") ; 对象的产生-->heapstr = new String("str") ; 引用指向了对象. 恩?我怎么记得Java分值传递和地址传递两种的? 转:在传基本数据类型 变量时,直接传值不会让人费解;但当传递对象时,就应该理解为传递的是对象引用的值,但这个值并不是对象本身,而是指向该对象,即你让另一个引用指向了该对象。 --Java以By Value的方式传递Object reference。 以下面简单程序为例: package test; public class BlogTest { public void modifyAAA(int x, java.util.ArrayList list) { x += 5; System.out.println("x=====" + x); list.add(new java.util.Date()); System.out.println(list.size()); } public static void main(String[] args) { BlogTest blogtest = new BlogTest(); int i = 5; java.util.ArrayList list = new java.util.ArrayList(); System.out.println("i=======" + i); System.out.println("list.size()==="+list.size()); blogtest.modifyAAA(i, list); System.out.println("i==new==" + i); System.out.println("list.size()====" + list.size()); } } /* 运行得到的结果是这样的 i=======5 list.size()===0 x=====10 1 i==new==5 list.size()==new==1 */ 这说明在参数传递过程中发生了以下事情:int 变量 i 被复制了一份给 int x,在modifyAAA()方法中改变了x的值并不会影响主函数中i的值,当然,这是变量生存区间不同,很好理解。但发现list对象的引用传到modifyAAA()方法的前后,主函数中的list也跟着发生了变化。这正说了在传递对象引用时,形参得到了实参对象的引用拷贝,两个引用都指向了同一list对象,所以形参改变了list同时也能反映到实参中来。 JAVA没有地址传递,不过JAVA中的 参数为一个引用的时候,传过去的引用的值其实就是对象的地址。 本帖最后由 AWUSOFT 于 2010-01-19 09:32:42 编辑 请问我想在Struts2的validate()方法里写个判断email格式是否正确的语句应该怎样来实现? POJO的一个问题 寻求答案 日期格式转化问题,在线等! 2008年应届生求职java相关工作 求一算法 等式还原,请进来看谢谢 有没什么办法在运行时往String[] strlist这样定义的数组里加数据? System.out.print 和 System.err.print 有什么区别? 为什么!在线等待! 如何记住Exception的层次关系 继承的内存分配问题 comparator接口与Comparable接口的区别。
对象的声明。
new String("str") ; 对象的产生-->heap
str = new String("str") ; 引用指向了对象.
恩?
我怎么记得Java分值传递和地址传递两种的?
在传基本数据类型 变量时,直接传值不会让人费解;但当传递对象时,就应该理解为传递的是对象引用的值,但这个值并不是对象本身,而是指向该对象,即你让另一个引用指向了该对象。
--Java以By Value的方式传递Object reference。
以下面简单程序为例:
package test;
public class BlogTest
{
public void modifyAAA(int x, java.util.ArrayList list)
{
x += 5;
System.out.println("x=====" + x);
list.add(new java.util.Date());
System.out.println(list.size());
}
public static void main(String[] args)
{
BlogTest blogtest = new BlogTest();
int i = 5;
java.util.ArrayList list = new java.util.ArrayList();
System.out.println("i=======" + i);
System.out.println("list.size()==="+list.size());
blogtest.modifyAAA(i, list);
System.out.println("i==new==" + i);
System.out.println("list.size()====" + list.size());
}
}
/*
运行得到的结果是这样的
i=======5
list.size()===0
x=====10
1
i==new==5
list.size()==new==1
*/
这说明在参数传递过程中发生了以下事情:int 变量 i 被复制了一份给 int x,在modifyAAA()方法中改变了x的值并不会影响主函数中i的值,当然,这是变量生存区间不同,很好理解。但发现list对象的引用传到modifyAAA()方法的前后,主函数中的list也跟着发生了变化。这正说了在传递对象引用时,形参得到了实参对象的引用拷贝,两个引用都指向了同一list对象,所以形参改变了list同时也能反映到实参中来。