数据类型

  • 基本数据类型变量存储的是数据本身
  • 引用类型变量存储的是数据的空间地址

字符串直接量

Java 没有内置的字符串类型,而是提供了一个标准类库 String。

特征:不可变字符串

优点:编译器可以让字符串共享(只有字符串常量是共享的,而 + 或 substring 等操作产生的结果并不是共享的)

当程序第一次使用某个字符串直接量时,Java 会使用常量池来缓存该字符串直接量,如果程序后面的部分需要用到该字符串直接量时,Java 会直接使用常量池中的字符串直接量。

常量池指的是在编译器被确定,并被保存在已编译的 .class 文件中的一些数据。它包括关于类、方法、接口中的常量,也包括字符串直接量。

看下面程序:

1
2
3
4
5
String s0 = "hello";
String s1 = "hello";
String s2 = "he" + "llo";
System.out.println(s0 == s1);
System.out.println(s0 == s2);

运行结果为

1
2
true
true

Java 会确保每个字符串常量只有一个。例子中的 s0 和 s1 中的 hello 都是字符串常量,它们在编译器就被确定了。而 hello 也是字符串常量,当一个字符串由多个字符串常量连接而成时,它本身也是字符串常量,s2 同样在编译期就被解析为一个字符串常量,所以 s2 也是常量池中 hello 的引用。

自动类型转换

把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将会进行自动类型转换(隐式转换),否则需要强制转换。

强制类型转换

强制类型转换可能存在溢出导致数据精度丢失的情况。

小结