Java中new出來的算是物件嗎?
阿新 • • 發佈:2018-12-23
如題,一直有個問題困惑著我,基本型別中我們可以這樣定義物件(以int為例):
int a;
而引用型別卻是隻能new出來的,比如這樣的:
Human xiaoming=new Human();
問題來了,這裡的xiaoming算是物件嗎?如果說不是,那不是說好的萬物皆物件該怎麼解釋,它不是Human類的一個例項嗎?若是物件,為何跟基本型別定義的物件有很大的區別?
歸根到底,我們可以把這個問題轉化成new的物件是值傳遞還是引用傳遞。我們可以做一個實驗進行佐證一下。
Person類:
package UNI; public class Person { public void eat() { System.out.println("睡"); } public void sleep() { System.out.println("玩"); } public void play() { System.out.println("吃"); } }
客戶端:
package UNI;
public class newEX {
public static void main(String[] args) {
Person a=new Person();
a.eat();
a.sleep();
a.play();
Person b=a;
System.out.println(b);
}
}
在這個程式碼中,我們可以想象一下,如果僅僅是值傳遞,那b到底該是什麼?是eat、sleep還是play呢?執行結果如下:
睡
玩
吃
[email protected]
我們可以清晰第看到,最後一行輸出的結果是一個地址,也就是說我們new出來的是引用物件而不是單純的物件。這也是為什麼我們在輸入陣列的時候需要Arrays.toString,不然打印出來的就是地址。
通過這個例子我們不僅僅可以驗證我們的想法,而且,我們可以發現,如果說new出來的是引用傳遞,那麼,我們要賦值另外一個物件就變得非常簡便。比如說,我們要實現這一一個想法,把一個人的資訊複製很多份(假如100份),如果我們按照一般的辦法就只能不斷的new100次,如果能進行傳遞引用,程式碼不僅僅變得很簡單,而且簡潔。比如說:
package ddd; public class newEX { public static void main(String[] args) { Information a=new Information("小紅"); a.gender("女"); a.weigh(47); a.hobby("打麻將"); for (int i = 0; i <100; i++) { Person b=a; } } }
很明顯,這樣進行傳遞就回變得非常簡潔。