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