当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
他给的答案是:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
小弟不太明白,好像和自己对值类型与引用类型的理解不太一样,请熟悉这个的人给解释一下好么?感谢中。晚上结贴。
他给的答案是:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
小弟不太明白,好像和自己对值类型与引用类型的理解不太一样,请熟悉这个的人给解释一下好么?感谢中。晚上结贴。
不过我总觉得这样讲有些误导人的嫌疑。其实参数传递,传递的只有两种形式的参数,一种是基本类型参数,一种对象参数。
基本类型传递的是数值,而对象传递传的是对象引用值。所以说java只有值传递。其实这个概念被强调应该是区别于c++的。其实很简单的一个概念,初学者最早理解基本都是正确的,却被“只有值传递”弄糊涂了
传的是遥控器的copy,但是这个copy还是可以操作那台电视的。
这样话,当对象作为参数进去后,它让我们理解传的只是一个引用,把这个引用当个值,可能是一个内存地址值,这样话在里面所作的修改,都可能影响到这个对象的具体属性。不知道,你是否明白了?
A a;这里定义一个变量
a=new A();这里把创建的对像的内存首地址给它,所说a变量的值只是一个地址值.当传参数的时候
public void s(A b)
{
}
这时候也是创建一个变量b,然后把变量a的值(地址值)给b,所以b和a就是引用了同个对像,因为它们的值是同一个地址值.
所以说是传"值"-------------->地址值但是它们都是指向同一个对像(因为地址值相同)-----这就产生了引用传值的说法.
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
他给的答案是:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
------------------------------------------------------------------------------------
首先要声明,JAVA中只有值传递,没有地址传递。
然后我们来看,JAVA中对象分为两种,一种是基本类型,另一种是引用类型。基本类型是值传递这个没什么好说的;引用类型则麻烦一点,我们来看个例子:class ReferObj
{
private int arr =0;
ReferObj(int i)
{
this.arr = i;
}
public void setArr(int i)
{
this.arr = i ;
}
public String toString()
{
return this.arr;
}}public class Test
{
void modifyArr(ReferObj obj , int i)
{
obj.setArr(i)
} void modifyObj(ReferObj obj , int i)
{
obj = new ReferObj(i);
} public static void main(String[] args)
{
Test test = new Test();
ReferObj obj = new ReferObj(1) ;
test.modifyArr(obj ,2); test.modifyObj(obj ,3);
System.out.print(obj);
}
搂主说,这段程序会打印什么呢?呵呵,当然是2。
这是因为在JAVA中,初始化一个引用类型的变量会初始化两个变量,一个引用,一个对象本身,在JAVA中传递的实际上是引用的COPY,也就相当于引用的值传递,所以在程序中你能改变的只是引用指向的对象的属性,而不能改变引用的指向。