【參考资料】
public void test() throws Exception { System.out.println("\nint:================="); int i = 2; System.out.println("before:" + i); change1(i); System.out.println("after:" + i); System.out.println("\nInteger:================="); Integer integer = 3; System.out.println("before:" + integer); change2(integer); System.out.println("after:" + integer); System.out.println("\nString:================="); String str = new String("xxx"); System.out.println("before:" + str); change3(str); System.out.println("after:" + str); System.out.println("\nString[]:================="); String[] array = new String[]{"a", "b", "c"}; System.out.println("before:" + array[0]); change4(array); System.out.println("after:" + array[0]); System.out.println("\nBook:================="); Book book = new Book("book1"); System.out.println("before:" + book.name); change5(book); System.out.println("after:" + book.name); System.out.println("\nint[]:================="); int[] int_array = new int[]{1, 2, 3}; System.out.println("before:" + int_array[0]); change6(int_array); System.out.println("after:" + int_array[0]); } public void change1(int i) { i = 4; } public void change2(Integer integer) { integer = (Integer) 8; } public void change3(String str) { str = new String("yyy"); } private void change4(String[] array) { array[0] = "A"; } private void change5(Book book) { book.name = "book2"; } private void change6(int[] int_array) { int_array[0] = 10; } private class Book { public String name; Book(String name) { this.name = name; } }
java到底是值传递仍是引用传递? (当中“三:调用方法时发生了什么?”讲的很是清晰)
html
java 中 Integer 传參方式的问题,不是说Integer是引用传递么?但为何不会改变itpost
String 和 Integer 传递给方法时到底是不是传递引用??!this
!spa
http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html
When the argument is of reference type, pass-by-value means that the method cannot change the object reference, but can invoke the object's methods and modify the accessible variables within the object.
当參数是引用类型时。你能经过调用该引用所指向的对象自己的方法来改变对象自身,但是。你并不能改变该引用。(你改变的仅仅能是引用所指向的对象,而不是引用。.net因此,仍然是值传递。)code
不管你传的是什么,传过去的都仅仅是一个副本而已,这个副本做为方法的局部变量保存在栈中。对象
假设传的是基本数据类型,改动这个值并不会影响做为參数传进来的那个变量,因为你改动的是方法的局部变量,是一个副本。
假设传的是一个对象的引用,也是同样的,也是一个副本,但是这个副本和做为參数传进来的那个引用指向的是内存中的同一个对象,因此你经过这个副本也可以操做那个对象。但是假设你改动这个引用自己,比方让他指向内存中的另一个对象,原来做为參数传进来的那个引用不会受到影响。
我认为弄明确这些便可了,说值传递或引用传递都无所谓,但是说值传递更适合一些,这个值可以是引用也可以是基本数据类型。blog