住房和城乡建设部干部学院网站,郑州 (网站建设,登陆网站显示域名解析错误怎么办,wordpress能建商城吗直接量是指在程序中通过源代码直接给出的值#xff0c;例如在int a 8;代码中#xff0c;为变量 a 所分配的初始值 8 就是一个直接量。
直接量的类型
并不是所有的数据类型都可以指定直接量#xff0c;能指定直接量的通常只有三种类型#xff1a;基本类型、字符串类型和 …直接量是指在程序中通过源代码直接给出的值例如在int a 8;代码中为变量 a 所分配的初始值 8 就是一个直接量。
直接量的类型
并不是所有的数据类型都可以指定直接量能指定直接量的通常只有三种类型基本类型、字符串类型和 null 类型。具体而言Java 支持如下 8 种类型的直接量。
1 . int 类型的直接量 在程序中直接给出的整型数值可分为二进制、十进制、八进制和十六进制 4 种其中二进制需要以 0B 或 0b 开头八进制需要以 0 开头十六进制需要以 0x 或 0X 开头。例如 123、012对应十进制的 10、0x12对应十进制的 18等。
2 . long 类型的直接量 在整型数值后添加 l 或 L 后就变成了 long 类型的直接量。例如 3L、0x12L对应十进制的 18L。
3 . float 类型的直接量 在一个浮点数后添加 f 或 F 就变成了 float 类型的直接量这个浮点数可以是标准小数形式也可以是科学计数法形式。例如 5.34F、3.14E5f。
4 . double 类型的直接量 直接给出一个标准小数形式或者科学计数法形式的浮点数就是 double 类型的直接量。例如 5.36、3.1415。
5 . boolean 类型的直接量 这个类型的直接量只有 true 和 false。
6 . char 类型的直接量 char 类型的直接量有三种形式分别是用单引号括起来的字符、转义字符和 Unicode 值表示的字符。例如‘a’‘\n’和‘\u0061’。
7 . String 类型的直接量 一个用双引号括起来的字符序列就是 String 类型的直接量。
在大多数其他语言中包括 C/C字符串作为字符的数组被实现。然而在 Java 中并非如此。在 Java 中字符串实际上是对象类型。
8 . null 类型的直接量 这个类型的直接量只有一个值即 null。
在上面的 8 种类型的直接量中null 类型是一种特殊类型它只有一个值null。而且这个直接量可以赋给任何引用类型的变量用以表示这个引用类型变量中保存的地址为空即还未指向任何有效对象。
直接量的赋值
通常总是把一个直接量赋值给对应类型的变量例如下面代码都是合法的。
int a 5;
char c a;
boolean b true;
float f 5.22f;
double d 4.17;
String name 中国第一;
String url http://www.baidu.com;除此之外Java 还支持数值之间的自动类型转换因此允许把一个数值直接量直接赋给另一种类型的变量这种赋值必须是系统所支持的自动类型转换例如把 int 类型的直接量赋给一个 long 类型的变量。
String 类型的直接量不能赋给其他类型的变量null 类型的直接量可以直接赋给任何引用类型的变量包括 String 类型。boolean 类型的直接量只能赋给 boolean 类型的变量不能赋给其他任何类型的变量。
关于字符串直接量有一点需要指出当程序第一次使用某个字符串直接量时Java 会使用常量池constant pool来缓存该字符串直接量如果程序后面的部分需要用到该字符串直接量时Java 会直接使用常量池constantpool中的字符串直接量。
注意 由于 String 类是一个典型的不可变类因此 String 对象创建出来的就不可能改变因此无需担心共享 String 对象会导致混乱。
常量池constant pool指的是在编译期被确定并被保存在已编译的 .class 文件中的一些数据它包括关于类、方法、接口中的常量也包括字符串直接量。
示例程序
String s0 hello;
String s1 hello;
String s2 he llo;
System.out.println(s0 s1);
System.out.println(s0 s2);运行结果为
true
trueJava 会确保每个字符串常量只有一个不会产生多个副本。例子中的 s0 和 s1 中的“hello”都是字符串常量它们在编译期就被确定了所以 s0 s1 返回 true。而“he”和“llo”也都是字符串常量当一个字符串由多个字符串常量连接而成时它本身也是字符串常量s2 同样在编译期就被解析为一个字符串常量所以 s2 也是常量池中“hello”的引用。因此程序输出 s0 s1 返回 trues1 s2 也返回 true。