Java直接量(字面量)

直接量是指在程序中通过源代码直接给出的值,例如在int a = 5;代码中,为变量 a 所分配的初始值 5 就是一个直接量。

Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)

直接量的类型

并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型和 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.34、3.14E5。

5)boolean 类型的直接量

这个类型的直接量只有 true 和 false。

6)char 类型的直接量

char 类型的直接量有三种形式,分别是用单引号括起来的字符、转义字符和 Unicode 值表示的字符。例如‘a’,‘\n’和‘\u0061’。

7)String 类型的直接量

一个用双引号括起来的字符序列就是 String 类型的直接量。

在大多数其他语言中,包括 C/C++,字符串作为字符的数组被实现。然而,在 Java 中并非如此。在 Java 中,字符串实际上是对象类型。在教程后面你将看到,因为 Java 对字符串是作为对象实现的,因此,它有广泛的字符串处理能力,而且功能既强又好用。

8)null 类型的直接量

这个类型的直接量只有一个值,即 null。

在上面的 8 种类型的直接量中,null 类型是一种特殊类型,它只有一个值:null。而且这个直接量可以赋给任何引用类型的变量,用以表示这个引用类型变量中保存的地址为空,即还未指向任何有效对象。

直接量的赋值

通常总是把一个直接量赋值给对应类型的变量,例如下面代码都是合法的。

int a = 5;
char c = 'a';
boolean b = true;
float f = 5.12f;
double d = 4.12;
String name = "优快云";
String url = "http://www.youkuaiyun.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
true

Java 会确保每个字符串常量只有一个,不会产生多个副本。例子中的 s0 和 s1 中的“hello”都是字符串常量,它们在编译期就被确定了,所以 s0 = s1 返回 true。

而“he”和“llo”也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它本身也是字符串常量,s2 同样在编译期就被解析为一个字符串常量,所以 s2 也是常量池中“hello”的引用。

因此,程序输出 s0 == s1 返回 true,s1 == s2 也返回 true。

### Java 字面量的定义 在Java编程语言中,字面量是指直接用于表示固定值的数据项。这些值可以直接嵌入到程序代码之中而不需要额外声明或计算。对于不同基础数据类型而言,Java提供了多种类型的字面量来代表相应的具体数值。 #### 整型字面量 整数字面量默认情况下会被解释为`int`类型,其大小为32位有符号整数[^1]。然而,在某些特定条件下,较小范围内的整数字面量也可以隐式地作为更短长度的整数类型处理: - 当一个不超过相应取值范围的小整数字面量被赋予`byte`或者`short`类型的变时,并不会引发编译错误; - 同样地,只要该整数字面量处于合法范围内,则可安全地分配给目标类型而不必担心溢出问题[^2]。 ```java // 正确的例子 byte b = 10; // 符合byte的有效区间[-128, 127] short s = 500; // 符合short的有效区间[-32768, 32767] // 错误例子:超出有效范围会报错 byte errorByte = 2000; ``` #### 浮点型字面量 浮点数有两种形式——单精度(`float`)和双精度(`double`)。为了区分这两种情况,默认所有的浮点文字都是`double`类型;如果希望指定某个具体的浮点数为`float`类型,则需在其后面加上字母F/f。 ```java double dValue = 3.14; float fValue = 3.14f; ``` #### 字符串字面量 字符串字面量是由一对双引号包围起来的一系列字符序列。值得注意的是,虽然String对象不是原始数据类型而是类实例,但在语法上允许将其视为一种特殊的字面量表达方式。此外,还可以通过诸如`Integer.parseInt()`这样的工具函数实现从字符串向其他基本类型的转换操作[^4]。 ```java String strLiteral = "Hello World!"; int numFromStr = Integer.parseInt("123"); ``` #### 布尔型字面量 布尔逻辑只有两个可能的状态:“真” (`true`) 和 “假” (`false`) ,它们同样属于字面量的一部分。 ```java boolean flagTrue = true; boolean flagFalse = false; ``` #### 特殊字面量 `null` 除了上述常规意义上的字面量之外,还有一个特别重要的成员叫做`null`,它用来指代没有任何引用的对象实例。 ```java Object objRef = null; ``` ### 使用注意事项 当涉及到不同类型之间的相互赋值时,应当注意潜在的风险以及必要的显式强制转型措施。特别是针对那些具有较窄存储空间的目标容器来说,确保源端提供的初始值确实位于许可界限之内是非常关键的一项工作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值