1. 程式人生 > >java建立物件時,new 出一個物件 和 = null的區別

java建立物件時,new 出一個物件 和 = null的區別

首先要明白,java裡物件傳遞的時候,傳遞的都是引用(也就是物件的地址),這比傳遞整個物件高效的多。而基礎型別,int,double等傳遞的才是值。
比如,(new ArrayList<String>).add(new String("hello")),jvm只是把new String("hello")的地址存入到了列表list裡面。String str = new String("Test"),是開闢記憶體放入了物件,並把它的引用賦給str。

同理,BookInfo bookinfo=null與BookInfo bookinfo=new BookInfo():前者,是聲明瞭一個物件(的引用),jvm並沒有開闢記憶體放入一個物件;而後者,在聲明瞭一個物件的引用後,又把新開闢的沒有儲存任何有效值的物件的地址賦給了他。bookinfo=test.getinfo(),又把它指向了另一個地址 = = 也就是說原來開闢的記憶體並沒有用,那就沒有意義。但是java虛擬機器自動垃圾回收機制會判斷並回收記憶體的。。不用想太多。
你完全可以寫成:
ArrayList<BookInfo> InfoList=new ArrayList<BookInfo>();
BookInfo bookinfo=infoList.getInfo()。

綜上:如果你的類在建立後,要自己讀寫資料,那就必須初始化;如果像Bookinfo那樣,完全是為了從其他地方接收引用,也完全可以省了new吧。

如果是在類的成員變數中,BookInfo bookinfo;和BookInfo bookinfo=null;是一樣的效果;因為該類在初始化時成員變數也會做初始化,預設就是null;而方法內的變數則不會初始化;

而如果是在方法的成員變數,則必須初始化,也就是=null或者new,因為為了保證java的安全性;