java 形參的值傳遞和引用傳遞
分析java 函式引數傳遞的型別.
首先看示例:
//定義一個受測試的類 public static class Value { private String value = "value"; public String getValue() { return value; } public void setValue(String value) { this.value = value; } } //定義對受測試類的 操作方法 public static void newValue(Value value) { value = new Value(); value.setValue("new value"); System.out.println("In newValue, HashCode = " + value.hashCode() + ", value = " + value.getValue()); } //定義對受測試類的 操作方法 public static void modifyValue(Value value) { value.setValue("new value"); System.out.println("In modifyValue, HashCode = " + value.hashCode() + ", value = " + value.getValue()); } //測試 public static void main(String[] args) { Value value1 = new Value(); System.out.println("Before modify, HashCode = " + value1.hashCode() + ", value = " + value1.getValue()); //1. Before modify, //HashCode = 12677476, value = value // 將value1指向新的Value物件 //[分析點1] newValue(value1); //1. In newValue, HashCode = 33263331, value = new value System.out.println("After modify, HashCode = " + value1.hashCode() + ", value = " + value1.getValue() + "\n"); //1. After modify, //HashCode = 12677476, value = value Value value2 = new Value(); System.out.println("Before modify, HashCode = " + value2.hashCode() + ", value = " + value2.getValue());//1. Before modify, HashCode = 6413875, value = value // 使用object的set方法,修改物件的內部值 //[分析點2] modifyValue(value2); //In modifyValue, HashCode = 6413875, value = new value System.out.println("After modify, HashCode = " + value2.hashCode() + ", value = " + value2.getValue()); //1. After modify, HashCode = 6413875, value = new value }
分析:
[分析點1] 處呼叫下面函式時的引數傳遞分析:
newValue(value1); //1. In newValue, HashCode = 33263331, value = new value
//定義對受測試類的 操作方法
public static void newValue(Value value) {
/*
此時 函式內的區域性變數 value引用的是value1,
相當於c語言中 value是一個指向Value型別的一個指標:
Value * value;
而之前new 建立的value1 相當於c語言中:
Value * value1 = new Value();
value 是在棧記憶體中重新分配的一個指標型變數,該指標指向 value1指向的物件.
*/
value = new Value(); //重置 value指標,指向一個新的物件, 此時value和value1分別指向不同的物件了.
value.setValue("new value");
System.out.println("In newValue, HashCode = "
+ value.hashCode() + ", value = " + value.getValue());
}
畫圖個草圖:
結論:
有一種說法是當一個物件或引用型別變數被當作引數傳遞時,也是值傳遞,這個值就是物件
的引用,因此JAVA 中只有值傳遞,沒有
還有一種說法是引用可以看作是物件的
別名,當物件被當作引數傳遞給方法時,傳遞的是物件的引用,因此是引用傳遞
這種說法只是觀察的角度不同,實質是相同的.
相關推薦
java 形參的值傳遞和引用傳遞
分析java 函式引數傳遞的型別. 首先看示例: //定義一個受測試的類 public static class Value { private String value = "value"; public String getValue() {
大歐陽在java 實參與形參還有值傳遞和引用傳遞之間的理解
一、實參和形參先扯一段程式碼public static void swap(int a,int b) { int tmp = a; a = b; b = tmp; System.out.println("
Java 值傳遞和引用傳遞
too log test img [0 st3 tle class cnblogs 引用傳遞 示例: public class Test3 { public static void change(int []a){ a
JAVA中的值傳遞和引用傳遞問題
log 輸出結果 基礎知識 blue static 繼續 oid .net red 這是個老生常談的問題了,引起過無數爭論,但可以說一直沒有一個令人滿意的回答。 有人總結過: 對象是按引用傳遞的 Java 應用程序有且僅有的一種參數傳遞機制,即按值傳遞
java中值傳遞和引用傳遞
public 例子 oar 是什麽 sta light 修改 [] 重要 1:按值傳遞是什麽 指的是在方法調用時,傳遞的參數是按值的拷貝傳遞。示例如下: [java] view plain copy public class TempTest { private
java中的值傳遞和引用傳遞
raise 兩個 demo1 double class turn style chan reference java 參數,不管是原始類型還是引用類型,傳遞的都是參數的副本。 如果參數類型是原始類型,那麽傳遞的參數是這個參數的一個副本,也就是這個原始參數的值。如果在函數中改
這一次,徹底解決Java的值傳遞和引用傳遞
信息 getter 數據類型 裝載 而已 訪問 實參 數據結構 修改 本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麽實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論
JAVA值傳遞和引用傳遞
內容 stub generated https ati [1] 數據 details 接收 JAVA值傳遞和引用傳遞 @Author: TianchiLiu 1 值傳遞和引用傳遞 值傳遞: 方法調用時,實際參數把它的值傳遞給對應的形式參數,函數接收的是原始值的一個copy
[精]--這一次,讓你徹底明白Java的值傳遞和引用傳遞!
本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麼實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的部落格說兩者皆有;這讓人有點摸不著頭
《java面試題02》--值傳遞和引用傳遞
值傳遞和引用傳遞,近期介面開發中處理結果集等資料的時候常用到,二者主要區別在於所傳的引數型別: public static void main(String[] args) { test(); } public static void test(){ Str
徹底搞懂Java的值傳遞和引用傳遞
學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麼實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的部落格說兩者皆有;這讓人有點摸不著頭腦,下面我們就這個話題做一些探討,對書籍、對論壇
java中的值傳遞和引用傳遞有什麼區別呀?
值傳遞: (形式引數型別是基本資料型別和String):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。 引用
java中的值傳遞和引用傳遞有什麽區別呀?
地址 system main方法 demo ring brush 執行 相關 變量 值傳遞: (形式參數類型是基本數據類型和String):方法調用時,實際參數把它的值傳遞給對應的形式參數,形式參數只是用實際參數的值初始化自己的存儲單元內容,是兩個不同的存
java中的值傳遞和引用傳遞用法詳解
值傳遞:方法呼叫時,實際引數把它的值傳遞給對應的形式引數,方法執行中形式引數值的改變不影響實際參 數的值。 引用傳遞:也稱為傳地址。方法呼叫時,實際引數的引用(地址,而不是引數的值)被傳遞給方法中相對應的形式引數,在方法執行中,對形式引數的操作實際上就是對實際引數的
Java基本資料型別以及由不可變類帶來的值傳遞和引用傳遞的難點分析
一、Java提供的資料型別 Java提供了8中原始的資料型別(byte,short,int,long,float,double,char,boolean),這些資料型別不是物件,相應的變數被定義後會立刻在棧上被分配記憶體空間。除此之外的資料型別,都是引用型別,引用型別在變數
String 不變性以及Java 值傳遞和引用傳遞
查看 () spa har args sta ogg [] btn String 不變性以及Java 值傳遞和引用傳遞 public class Example { String str = new String("good"); cha
Java 中的值傳遞和引用傳遞問題
Java 中的值傳遞和引用傳遞問題 public class Operation { int data = 50; void change(int data) { data = data + 100; } public static void main(S
java中值傳遞和引用傳遞的知識點
java中值傳遞和引用傳遞的知識點 直接看下面的截圖和程式碼吧 package com.xuebao; public class ValueAndRef { /** * * @Description: (測試值傳遞和引用傳遞) * @param p
來一次徹底解決Java的值傳遞和引用傳遞
本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麼實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的部落格說兩者皆
Java的值傳遞和引用傳遞
本文旨在用最通俗的語言講述最枯燥的基本知識 學過Java基礎的人都知道:值傳遞和引用傳遞是初次接觸Java時的一個難點,有時候記得了語法卻記不得怎麼實際運用,有時候會的了運用卻解釋不出原理,而且坊間討論的話題又是充滿爭議:有的論壇帖子說Java只有值傳遞,有的部落格說兩者皆