字符数据类型
- 字符数据类型用来表示单个字符。字符字面值用单引号括住。
char letter = 'A';
char numChar = '4';
- Unicode 和 ASCII码
java内部使用二进制数。将字符映射到它的二进制形式的过程为编码。字符有着多种不同的编码方式。编码表定义该如何编码每个字符。
java支持Unicode 码。一个16位的 Unicode 占两个字节,用\u开头的4位十六进制数表示,范围从’\u0000’-’\uFFFF’。
大多数计算机是采用 ASCII ,它是表示所有大小写字母、数字、标点符号和控制字符的8位编码表。
字符 | 十进制编码值 | Unicode 值 |
---|---|---|
‘0’~‘9’ | 48~57 | \u0030 ~ \u0039 |
‘A’~‘Z’ | 65~90 | \u0041 ~ \u005A |
‘a’~‘z’ | 97~122 | \u0061 ~ \u007A |
- 特殊字符的转义序列
转义序列 | 名称 | Unicode 码 | 十进制值 |
---|---|---|---|
\b | 退格键 | \u0008 | 8 |
\t | Tab键 | \u0009 | 9 |
\n | 换行符 | \u000A | 10 |
\f | 换页符 | \u000C | 12 |
\r | 回车符 | \u000D | 13 |
\\ | 反斜杠 | \u005C | 92 |
\ " | 双引号 | \u0022 | 34 |
- 字符的比较和测试
两个字符可以使用关系操作符进行比较,如同比较两个数字一样。这是通过比较两个字符的Unicode 值来实现的。为了方便Character提供了一下方法来进行字符测试。
方法 | 描述 |
---|---|
isDigit(ch) | 如果指定的字符是一个数字,返回true |
isLetter(ch) | 如果指定的字符是一个字母,返回true |
isLetterOrDigit(ch) | 如果指定的字符是一个字母或者数字,返回true |
isLowerCase(ch) | 如果指定的字符是一个小写字母,返回true |
isUpperCase(ch) | 如果指定的字符是一个大写字母,返回true |
toLowerCase(ch) | 返回指定的字符的小写形式 |
toUpperCase(ch) | 返回指定的字符的大写形式 |
String类
char 只是代表一个字符。为了表示一串字符,可以使用String。
String str = "Hello";
String 实际上与System类一样,都是java库中的一个预定义的类。String类型不是基本类型,而是引用类型。
String str = “Hello”;这样的代码布局如下:
因为String 类型是引用类型,所以对于下面这段代码:
String str1 = "Hello";
String str2 = str1;
内存布局如图:
注意:修改str1是无法对str2发生变换的。
str1 = "world";
System.out.println(str2);
// 执行结果
Hello
事实上,str1 = “word” 这样的代码并不算“修改”字符串,这个引用重新指向了新的String对象。
String str1 = new String ("Hello");
//这样的创建方式是相当于在堆上重新开辟空间来存储内容,也就是内存中有两份的“Hello”。
有关于String的方法
下面是一些关于String 的一些方法:
方法 | 描述 |
---|---|
length() | 返回字符串中的字符数 |
charAt(index) | 返回字符串指定位置的字符 |
concat(s1) | 将本字符串和字符s1连接,返回一个新的字符串 |
toUpperCase() | 返回一个新字符串,其中所有的字母大写 |
toLowerCase() | 返回一个新字符串,其中所有的字母都小写 |
trim() | 返回一个新字符串,去掉了两边的空白字符 |
方法 | 描述 |
---|---|
equals(s1) | 如果该字符串等于字符串s1,返回true |
compareTo(s1) | 返回一个大于0 、等于0、小于0的整数,表明该字符串是否大于、等于、或小于s1 |
startsWith(prefix) | 如果字符串以特定的前缀开始,返回true |
endsWith(suffix) | 如果字符串以特定的后缀结束,返回true |
contains(s1) | 如果s1是该字符串的子字符串,返回true |
substring(beginIndex) | 返回该字符串的子串,从beginindex到结尾 |
substring(beginIndex,endIndex) | 返回字符串的子串,从beginIndex到endIndex |
indexOf(ch) | 返回字符串出现第一个ch的下标。如果没有,返回-1 |
indexOf(ch,fromIndex) | 返回字符串formIndex之后出现的第一个ch的下标,如果没有返回-1 |
面试题
-
String是基本数据类型吗?
String不是基本数据类型。 -
String是可变的话?
String是final类型的,不可变。 -
怎么比较两个字符串的值一样,怎么比较两个字符串是否同一对象?
比较字符串的值是否相同用equals,比较字符串对象是否同一个用==。 -
switch中可以使用String吗?
在java中switch后的表达式的类型只能为以下几种:byte、short、char、int(在Java1.6中是这样),在java1.7后支持了对string的判断。 -
String与byte[]两者相互之间如何转换?
String --> byte[] 通过String类的getBytes方法;byte[] > String通过new String(byte[])构造器。 -
可以自定义java.lang.String类并使用吗?
可以自定义java.lang.String类并编译成功,但不能被加载使用,具体请学习类加载机制。参考文献:https://www.cnblogs.com/liuheng0315/p/7160794.html