1. 程式人生 > >Java中new出來的算是物件嗎?

Java中new出來的算是物件嗎?

    如題,一直有個問題困惑著我,基本型別中我們可以這樣定義物件(以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;
			
		}
		
	}

}

很明顯,這樣進行傳遞就回變得非常簡潔。