5、字符和字符串
char
类型使用单引号'
,且仅有一个字符,
String
类型使用双引号"
,不止一个字符,可以用来存储中文、英文、数字
# char 字符
字符类型char
是基本数据类型,占用 2个字节,一个char
保存一个Unicode字符
中国用GB18030、美国用ASCII表示字符编码,不同国家都有自己的标准,Unicode将世界上所有的符号都纳入其中,每一个符号都给予一个独一无二的编码,这样就不会有乱码了。
UTF-8编码、UTF-16编码是Unicode的实现方式之一,在Java中,char类型描述的了UTF-16编码中额一个代码单元。
但是!强烈建议不要在代码中使用char类型,除非确实需要处理UTF-16。最好使用字符串处理数据。
char sex = '男';
Java内存中是使用Unicode字符表示存储的内容,要显示一个字符的Unicode格式,可以直接把char
类型赋予给int
类型
int sexInt = '男'; //字符 '男' 的Unicodde编码是 30007
而char
数据类型是一个采用 UTF-16 编码表示 Unicode代码点的代码单元,所以char可以识别一个16进制的字符。
直接用转义字符
\u
+Unicode编码的16进制 来表示一个字符
String hex= Integer.toHexString(30007); //把 30007 转为16进制 , 十进制的30007 = 十六进制的 7537
char sexChar = '\u7537'; // '男'
# String 字符串
最常见的引用数据类型就是String
,String
的底层其实是一个char[]
数组,但是String 很特殊,是一个 final
修饰的类。
String 作为常用的数据类型,描述的是字符串。用双引号""
表示。
String name = "HaC";
String sex; // null
String 不属于基本数据类型,属于引用数据类型,引用类型的默认值是null,所以 String 的默认初始值也是null
null
在Java中表示 空 ,表示没有为该变量分配内存空间
# 转义字符
String 字符串是用 一对双引号 " "
表示的,假如我们要打印以下这种格式:
我的公众号:"HelloCoder"
啪的一声,很快就写下:
String str = " 我的公众号:"HelloCoder"";
System.out.println(str);
发现报错了:
提示 ";" expected Not a statement
,什么意思呢?
Java它不能识别这么花里胡哨的双引号,它会认为 前面是一对双引号 " 我的公众号:"
是一个字符串,后面是一对双引号" "
也是一个字符串。
既然是一对双引号,你就应该用 分号;
来结束这段代码。中间的HelloCoder
算个锤子?
那怎么办呢?这就需要使用Java的转义字符
来声明了。
Java中可以使用反斜杠\ 来表示转义。
所谓转义就是使用反斜杠\来让这个字符表示不同寻常的意义。
Java规定: 使用 \"
来表示一个双引号。
修改一下代码:
String str = " 我的公众号:\"HelloCoder\" ";
System.out.println(str);
这样就不会报错了。最后输出:
我的公众号:"HelloCoder"
常见的转义字符:
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\a | 响铃(BEL) | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行,将当前位置移到下一行开头** | 010 |
\r | 回车,将当前位置移到本行开头 | 013 |
\t | 水平制表(跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\\ | **代表一个反斜线字符 \ ** | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\0 | 空字符(NULL) | 000 |
比如说我要使用\n
换行:
String str = " 我的公众号:\n\"HelloCoder\" ";
System.out.println(str);
输出:
我的公众号:
"HelloCoder"
# 字符串的拼接
Java规定,可以使用 +
来拼接字符串。
String str1 = " 我是HaC,";
String str2 = " 我的公众号:\"HelloCoder\" ";
String str3 = str1 + str2;
System.out.println(str3);
//一步到位
String str4 = " 我是HaC," + " 我的公众号:\"HelloCoder\" ";
System.out.println(str4);
输出:
我是HaC, 我的公众号:"HelloCoder"
我是HaC, 我的公众号:"HelloCoder"
# 字符串和整型数据拼接
+
在基本数据类型中,表示运算,在字符串中,表示拼接。
但是 字符串
+ 整型
会如何输出呢?
Java中 字符串+整型 ,或者 整型+字符串 都是返回一个 字符串,但是顺序不一样,输出也不一样。
eg:
int x = 1;
int y = 2;
String str = "HelloCoder";
System.out.println(x + y + str); // 3HelloCoder
System.out.println(str + x + y); // HelloCoder12
System.out.println(x + str + y); // 1HelloCoder2
x + y + str
可以拆分:首先是执行 x+y
, 返回3
,然后 3+ "HelloCoder"
,最后返回字符串 3HelloCoder
。
str + x + y
可以拆分:首先是执行 str + x
,返回 HelloCoder1
,然后 "HelloCoder1"+2
,最后返回字符串 HelloCoder12
。