【Java】基本類型和引用類型(值傳遞)
【關鍵詞】
【問題】
· 加深對基本類型和引用類型的理解;
【效果圖】
【分析】
- 參見最後的
【參考資料】
【解決方式】
【代碼】
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究竟是值傳遞還是引用傳遞?
(當中“三:調用方法時發生了什麽?”講的非常清晰)
-
Java之基本類型和引用類型、引用傳遞和值傳遞、“==”和equals()
-
java 中 Integer 傳參方式的問題,不是說Integer是引用傳遞麽?但為什麽不會改變it
-
String 和 Integer 傳遞給方法時究竟是不是傳遞引用??!
!
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.
當參數是引用類型時。你能通過調用該引用所指向的對象本身的方法來改變對象自身,可是。你並不能改變該引用。(你改變的僅僅能是引用所指向的對象,而不是引用。所以,仍然是值傳遞。)
-
JAVA 值傳遞還是引用傳遞
無論你傳的是什麽,傳過去的都僅僅是一個副本而已,這個副本作為方法的局部變量保存在棧中。
假設傳的是基本數據類型,改動這個值並不會影響作為參數傳進來的那個變量,由於你改動的是方法的局部變量,是一個副本。
假設傳的是一個對象的引用,也是一樣的,也是一個副本,可是這個副本和作為參數傳進來的那個引用指向的是內存中的同一個對象,所以你通過這個副本也能夠操作那個對象。可是假設你改動這個引用本身,比方讓他指向內存中的另外一個對象,原來作為參數傳進來的那個引用不會受到影響。
我認為弄明確這些即可了,說值傳遞或引用傳遞都無所謂,可是說值傳遞更適合一些,這個值能夠是引用也能夠是基本數據類型。
【Java】基本類型和引用類型(值傳遞)