java中有兩種數(shù)據(jù)類型:基本類型和引用類型。 基本類型有8個: 整數(shù)類型 byte、short、int、long 浮點數(shù)類型 float、double 字符型 char 布爾類型 boolean 引用類型包括三種: 類 Class 接口 Interface 數(shù)組 Array 基本類型是通過諸如 int a = 5; long b = 6L;的形式來定義的,稱為自動變量,自動變量存放的是字面值,不是類的實例,它存放在內(nèi)存的堆棧中,數(shù)據(jù)大小和生存期必須是確定的,存取速度比較快,在堆棧中的字面值可以共享,也就是說我們定義一個int a = 5;然后又定義了一個int b = 5;這時a與b在內(nèi)存中指向的是同一個字面常量。 引用類型一般是通過new關(guān)鍵字來創(chuàng)建,比如Integer num = new Integer(3);它存放在內(nèi)存的堆中,可以在運行時動態(tài)的分配內(nèi)存大小,生存期也不必事先告訴編譯器,當(dāng)引用類型變量不被使用時,Java內(nèi)部的垃圾回收器GC會自動回收走。引用變量中存放的不是變量的內(nèi)容,而是存放變量內(nèi)容的地址。 在參數(shù)傳遞時,基本類型都是傳值,也就是傳遞的都是原變量的值得拷貝,改變這個值不會改變原變量,而引用類型傳遞的是地址,也就是參數(shù)與原變量指向的是同一個地址,所以如果改變參數(shù)的值,原變量的值也會改變。這點要注意。 在java中,8種基本類型在java中都有對應(yīng)的封裝類型,也就是引用類型: 整數(shù)類型 Byte、Short、Integer、Long 浮點數(shù)類型 Float、Double 字符型 Character 布爾類型 Boolean 有時候我們會看到這樣的語句 Integer num = 3;Boolean b = true;這樣定義也能行得通,其實這里面有一個自動裝箱的問題,即java自動把3這個字面常量封裝成了Integer對象,同理也有自動拆箱。 還有些需要注意的比較特殊的地方: 1.Integer類型 Integer i1 = 3; Integer i2 = 3; 此時i1 == i2 返回的是true Integer i1 = 128; Integer i2 = 128; 此時i1 == i2返回的是false, 這時因為Integer的數(shù)值在-128~127之間時,即在int的范圍內(nèi),默認(rèn)是按照基本類型int來存放的,仍舊存在堆棧中,如果超出了int的范圍,就按照對象的方式來存放和比較了。 2、String類型 String類型我們有時候也會直接這樣定義: String s = "abc"; 這里的"abc"稱為字符串常量,也是存在堆棧中的,s中存放的就是指向這個堆棧地址的引用,如果再定義一個 String s1 = "abc"; 這時,s與s1存放的是同一個地址的引用,即s與s1指向的是同一個字符串常量, s == s1的值是true, 但是如果有 String s2 = new String("abc"); 這時s == s2則為false,因為使用new之后,每次生成的對象都不是同一個,即使存儲的內(nèi)容相同。 上面的s == s1,s == s2其實比較的都是地址,并不是里面的內(nèi)容。如果要比較內(nèi)容,可以使用equals()方法。
|