问题描述
- java传递 ”值传递和引用传递“还是全部 “值传递”
-
若说值传递。基本类型是copy的值赋给形参,对象是把 堆中对象的 地址 传给 形参。
若说分为值传递和引用传递。。引用传递 是因为这个传的地址,导致实参和形参 操作的都是同一块内存。有点乱,像文字层次上的撕逼。。
若往引用传递方面思考,C++的指针又把我搅乱了。,java里不能直接管理内存,传递的不是 变量本身 的栈地址。而是变量的内容(值)
解决方案
java没有什么值传递引用传递,都是传递对象引用,你可以理解为统统是值传递。
不过如果是对象,这个值的含义是引用,你修改引用不会对实参有影响,但是你修改这个对象的成员,因为是同一个对象,所以会作用到原来的对象上。
C#才分为引用和值传递。C#的引用的引用允许你在函数中将对象指向另一个对象,并且反应到实参上。
解决方案二:
举例
class A
{
public int X
}
void foo(A a)
{
a = new A();
a.X=123; //这么写不会影响原来的 a
}
void foo1(A a)
{
a.X=123; //这么写会影响原来的 a的X
}
解决方案三:
其实都是值传递,只是对象的引用相当于指针,只要指针的值一样,那么都指向那个对象,所以这个指针是不是副本没关系。
一般可以这样理解基本数据类型传的是值,对象传的是引用。
解决方案四:
java永远只有值传递
解决方案五:
Java只有值传递,没有引用传递
解决方案六:
关于值传递和引用传递,我更喜欢说传递的都是拷贝。
如果拷贝的这份东西就是一个值,那就是值,如果拷贝的东西指向的是一个对象,那就是引用传递。
具体这个引用的值会不会影响之前的值,那还要看这个对象是否是可变对象,如果遇到类似于String 这样的不可变对象,传递的即便是new出来的对象,但进去的值......
答案就在这里:java的引用传递和值传递
解决方案七:
参考。
http://www.cnblogs.com/clara/archive/2011/09/17/2179493.html
解决方案八:
1、Java中分值传递和引用传递
2、Java中数据类型为值类型的传递为值传递(例如:int、double等)
3、Java中数据类型为引用类型的传递为引用传递(例如:String、数组等)