看到一个java面试题:java
问:当一个对象被看成参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里究竟是值传递仍是引用传递?
答:是值传递。Java 编程语言只有值传递参数。当一个对象实例做为一个参数被传递到方法中时,参数的值就是该对象的引用一个副本。指向同一个对象,对象的内容能够在被调用的方法中改变,但对象的引用(不是引用的副本)是永远不会改变的。面试
如下是从其余文章里转的,只为加深理解编程
public class TempTest { private void test1(A a){ a.age = 20; System.out.println("test1方法中的age="+a.age); } public static void main(String[] args) { TempTest t = new TempTest(); A a = new A(); a.age = 10; t.test1(a); System.out.println(”main方法中的age=”+a.age); } } class A{ public int age = 0; }
结果是编程语言
test1方法中的age=20
main方法中的age=20
说明:在执行第10步t.test1(a); 时,main()中的变量a和test1中的变量a指向同一个地址,在test1方法中并无改变a的地址而是改变了属性的值,因此结果是main方法中的a的值发生了变化,可是这不是引用传递。除非在test1方法中new一个新的对象,把这个新的地址赋给a,则为引用传递,其结果中a的值不会发生变化。spa