从头再学java系列之char和Character的区别及Character的源码分析
char和Character類的區(qū)別
- char和Character類的區(qū)別
- Character的最大值和最小值
- Character字符種類
- Character類的緩存
char和Character類的區(qū)別
1.char是一種基本的數(shù)據(jù)類型,Character是char類型的包裝類,即通過Character創(chuàng)建出來的是一種對象。
Character的最大值和最小值
2.Character的最大值和最小值:是的,你沒有看錯,字符也可以用最大值和最小值。請看源碼:
public static final char MIN_VALUE = '\u0000';public static final char MAX_VALUE = '\uFFFF';以上代碼定義了Character類的最大值和最小值,我們都知道有一種編碼格式叫做utf-8,java里面的編碼格式就是Unicode編碼,ASCII編碼只定義了128個子符,而Unicode編碼集里面定義了65536個字符。最小值和最大值就是表示第一個和最后一個字符,第一個是null,最后一個是一個小方框字符。
下面的代碼是上面的輸出,只是第一行剛剛好是空白所以看不出來。
Character字符種類
Character中定義了字符的種類:很多種,每種都是特定的意思,只列舉一些常用的。
public static final byte UNASSIGNED = 0;//無效字符public static final byte UPPERCASE_LETTER = 1;//大寫字符public static final byte LOWERCASE_LETTER = 2;//小寫字符public static final byte TITLECASE_LETTER = 3;//題目字符public static final byte MODIFIER_LETTER = 4;//修飾字符public static final byte OTHER_LETTER = 5;//其他字符public static final byte NON_SPACING_MARK = 6;//非間隔字符public static final byte ENCLOSING_MARK = 7;//包圍字符public static final byte COMBINING_SPACING_MARK = 8;public static final byte DECIMAL_DIGIT_NUMBER = 9;public static final byte LETTER_NUMBER = 10;public static final byte OTHER_NUMBER = 11;public static final byte SPACE_SEPARATOR = 12;public static final byte LINE_SEPARATOR = 13;public static final byte PARAGRAPH_SEPARATOR = 14;public static final byte CONTROL = 15;public static final byte FORMAT = 16;public static final byte PRIVATE_USE = 18;public static final byte SURROGATE = 19;public static final byte DASH_PUNCTUATION = 20;public static final byte START_PUNCTUATION = 21;public static final byte END_PUNCTUATION = 22;public static final byte CONNECTOR_PUNCTUATION = 23;public static final byte OTHER_PUNCTUATION = 24;public static final byte MATH_SYMBOL = 25;public static final byte CURRENCY_SYMBOL = 26;public static final byte MODIFIER_SYMBOL = 27;public static final byte OTHER_SYMBOL = 28;public static final byte INITIAL_QUOTE_PUNCTUATION = 29;public static final byte FINAL_QUOTE_PUNCTUATION = 30;Character類的緩存
3.我們上面講到,char是一種基本的數(shù)據(jù)類型,Character是char類型的包裝類,即通過Character創(chuàng)建出來的是一種對象。但是,下面的代碼的結(jié)果,讓人迷惑。
char c='a';char b='a';Character d='a';Character e='a';System.out.println(c==b);//trueSystem.out.println(e==d);//trueSystem.out.println(c==d);//trueSystem.out.println(e==b);//true結(jié)果都是true,那么只能說明一個點,這些 變量/對象,在內(nèi)存中的地址都一樣。我的另外一篇博客有講到這個點:關于equals方法和==的區(qū)別
那么又能說明一個點,就是,Character類和Integer類一樣,都有進行字符的緩存
源碼走起:
Character和Integer類一樣,也是有一些常量被存儲在緩存池里面的,請看源碼:
該類一共緩存了從0-127共128個Character值
那么,緩存的128個字符到底是什么鬼呢?
通過控制臺打印出來,我們可以看到,是緩存了ASCII碼的字符。【一些特殊字符無法被打印出來】
再看源碼:
這段源碼,說明什么,說明只要是字符小于127的,都是從緩存池里面取出來,那么就是同一個對象,那么地址也就一樣了
總結(jié)
以上是生活随笔為你收集整理的从头再学java系列之char和Character的区别及Character的源码分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多渔:苦干执行,胜者为王!
- 下一篇: 坎德拉、流明、勒克斯之间的关系