基本類型:
布爾類型:boolean不能夠自動也不能強制轉換成其他類型,但是可以進行&,&&,|,||運算
字符類型:char(16)其他基本類型不能夠自動轉變為字符類型,但可以強制轉換為char,但是可以有截斷現象
整形類型:byte(8),short(16),int(32),long(64)初始化的時候都是使用整數字面量直接賦值,但是byte與byte,short與short變量相加,默認都得到int的值,所以必須強制轉換才能夠返回原來類型的值(例如:(byte)(b1+b2))
浮點類型:float(32),double(64)浮點數的字面量默認都是double類型,所以需要強制轉換成float才能夠初始化float,或者加上f或F后綴。(例如float f1 = 1.4F或者float f1 = (float)1.4
整形還可以使用八進制(以0開頭的整形數字字面量)、十六進制(以0x開頭的整形字面量)初始化;
浮點型:字面量不可以是八進制十六進制,但int可以自動轉化為浮點,所以仍然可以使用8進制16進制初始化,但是可以使用浮點計數法初始化,同樣可以加上f或d后綴,例1.23e+33F等
字符型char可以直接使用
unicode轉義符:
\uXXXX 四個16進制的數,在文本里面就是代表著某個字符,所以可以'\uXXXX'初始化一個char,可以\u0022\uXXXX\u0022初始化一個String,因為剛好\u0022代表雙引號。當然\uXXXX不能是雙引號,否則就編譯出錯了。
自動類型轉換:byte---short---int---long---float---double
但是short與char不能夠相互自動轉換,但是可以相互強制轉換
整型字面量可以初始化char,只要不超過65535的范圍,也就是也能夠使用8進制16進制初始化,但是整型變量不能夠賦值給char;
char可以自動轉換成int及以上
變量聲明與定義:
int[] intArray; //OK
int intArray[]; //OK
前面的加上 “= new int[變量or常量]” 都是可以的,但是“= new int(5)”是錯誤的
int[] intArray[]; //OK,但是代表的是數組的數組
int[5] intArray; //False
int intArray[5]; //False
三目運算符:
?:返回不同類型問題,跟C++稍微不同,無論返回值在第一表達式還是第二表達式,返回值都是根據高階類型返回,例子:
true ? 'a' : 9 返回結果是字符類型,所以字符類型是高階類型
true ? 'a' : 9.0 返回結果是浮點類型(對于double和float都是),所以浮點比字符類型高階
ture ? 9 : 9.0 返回結果是浮點類型,明顯
true ? "abc" : 9 返回結果是字符串類型,因為字符類型較高階
true ? 對象1實例 : 對象2實例 返回結果是最大共同父類,所以如果其中一個是另外一個的子類,那么就返回父類,如果互不繼承關系,則返回Object。
String總結:
首先聲明,==判斷是判斷對象引用的實例是否相同,即實例是否真正在相同的位置
Object默認的equals方法與==是一樣的(就是引用相同實例),String類重寫equals方法和hashCode方法,只要內容相同就返回ture(一般自己寫的類也建議重寫equals方法和hashCode方法)。所以這時候==與equals就具有不相同意義了。
http://www.javaeye.com/topic/122206
1. 首先String不屬于8種基本數據類型,String是一個對象。
因為對象的默認值是null,所以String的默認值也是null;但它又是一種特殊的對象,有其它對象沒有的一些特性。
2. new String()和new String("")都是申明一個新的空字符串,是空串不是null;
3. String str="string";
String str1="string";
String str2=new String ("string");
String str3="str" + new String("ing");
關于常量池概念,java虛擬機在常量池中只維持一個字符串的示例,所以str與str1引用都是引用常量池里面的共同實例,關鍵的是只有常量池里面的String才是唯一的,new空間里面的并不是。
但是str2,str3(而且str2與str3的空間地址也肯定不一樣的,引用的是新建空間堆里的實例,所以str==str1,str!=str2,str1!=str2,str1!=str3,str2!=str3
但是它們幾個使用equals都是返回true的,因為String類的hashCode函數根據內容返回hashCode碼,這個碼相同,則equals就返回true了,具體的equals與hashCode解釋可以參照《java核心技術 卷1 基礎知識》
注意:成員函數intern() :
當一個String實例str調用intern()方法時,Java查找常量池中是否有相同Unicode的字符串常量,如果有,則返回其的引用,如果沒有,則在常量池中增加一個Unicode等于str的字符串并返回它的引用;
所以:
String str1="string";
String str2=new String ("string");
str1==str2.intern() 返回true