从头再学java系列之char和Character的区别及Character的源码分析 您所在的位置:网站首页 characters和words的区别 从头再学java系列之char和Character的区别及Character的源码分析

从头再学java系列之char和Character的区别及Character的源码分析

#从头再学java系列之char和Character的区别及Character的源码分析| 来源: 网络整理| 查看: 265

char和Character类的区别 char和Character类的区别Character的最大值和最小值Character字符种类Character类的缓存

char和Character类的区别

1.char是一种基本的数据类型,Character是char类型的包装类,即通过Character创建出来的是一种对象。

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是一种基本的数据类型,Character是char类型的包装类,即通过Character创建出来的是一种对象。但是,下面的代码的结果,让人迷惑。

char c='a'; char b='a'; Character d='a'; Character e='a'; System.out.println(c==b);//true System.out.println(e==d);//true System.out.println(c==d);//true System.out.println(e==b);//true

结果都是true,那么只能说明一个点,这些 变量/对象,在内存中的地址都一样。我的另外一篇博客有讲到这个点:关于equals方法和==的区别 那么又能说明一个点,就是,Character类和Integer类一样,都有进行字符的缓存

源码走起: Character和Integer类一样,也是有一些常量被存储在缓存池里面的,请看源码: 该类一共缓存了从0-127共128个Character值

private static class CharacterCache { private CharacterCache(){} static final Character cache[] = new Character[127 + 1]; static { for (int i = 0; i // must cache 小于127从缓存池里面取出来 return CharacterCache.cache[(int)c]; } return new Character(c); }

这段源码,说明什么,说明只要是字符小于127的,都是从缓存池里面取出来,那么就是同一个对象,那么地址也就一样了



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有