如題,一直有個問題困惑著我,基本型別中我們可以這樣定義物件(以int為例):
int a;
而引用型別卻是只能new出來的,比如這樣的:
human xiaoming=new human();
問題來了,這裡的xiaoming算是物件嗎?如果說不是,那不是說好的萬物皆物件該怎麼解釋,它不是human類的乙個例項嗎?若是物件,為何跟基本型別定義的物件有很大的區別?
歸根到底,我們可以把這個問題轉化成new的物件是值傳遞還是引用傳遞。我們可以做乙個實驗進行佐證一下。
person類:
package uni;
public class person
public void sleep()
public void play()
}
客戶端:
package uni;
public class newex
}
在這個**中,我們可以想象一下,如果僅僅是值傳遞,那b到底該是什麼?是eat、sleep還是play呢?執行結果如下:
睡玩吃
ddd.person@10dea4e
我們可以清晰第看到,最後一行輸出的結果是乙個位址,也就是說我們new出來的是引用物件而不是單純的物件。這也是為什麼我們在輸入陣列的時候需要arrays.tostring,不然列印出來的就是位址。
通過這個例子我們不僅僅可以驗證我們的想法,而且,我們可以發現,如果說new出來的是引用傳遞,那麼,我們要賦值另外乙個物件就變得非常簡便。比如說,我們要實現這一乙個想法,把乙個人的資訊複製很多份(假如100份),如果我們按照一般的辦法就只能不斷的new100次,如果能進行傳遞引用,**不僅僅變得很簡單,而且簡潔。比如說:
package ddd;
public class newex
}}
很明顯,這樣進行傳遞就回變得非常簡潔。 物件到底是怎麼new出來的
前言 要想理解本文,必須先了解jvm的記憶體結構 一.建立物件的方式二.建立物件的步驟 物件在jvm中怎麼儲存?判斷物件的類是否載入,沒載入進行載入 為物件分配記憶體空間 處理併發的問題 使用tlab或者cas保證原子性 初始化分配到的空間 給所有的屬性賦初始值 設定物件頭 執行init方法 執行 ...
C 中給new出來的物件裡set值的簡化寫法
有如下 本來是以上面的形式寫的,visual studio彈出了乙個優化提示,執行後 被修改為下面的寫法,得知c 中給物件設定值有如下簡化寫法 其就相當於給類提供了乙個 任意個數引數的構造方法,用起來比較靈活方便 dataupdateentity dataupdate1 new dataupdate...
java使用new物件和 的區別
前言 簡單說明一下new物件和 物件的區別 先說一下 string a test 1 string b new string test 2的區別吧 1這種方式jvm會先去共享的字串池中查詢,有沒有 test 這個詞,如果有直接返回它的引用 如果沒有,就會建立這個物件,再返回,因此,a b 相當於存在...