文章目录
官方解释
在Java中,字面量(literal)指的是源代码中用来表示固定值的符号或标记。这些值可以是基本数据类型(如整数、浮点数、字符和布尔值)的直接表示,也可以是字符串或其他复杂类型的直接表示。
在学习java中的字面量的时候,不能单纯看字面量,还需要结合java的数据类型来学习。
简单来讲,字面量决定了数据的内容,而数据类型规定了如何解释和操作数据。
结合数据类型来介绍字面量
整数类型(int)字面量
**解释:**int类型的字面量表示的是一个32位有符号整数。它的取值范围是从-231(即-2147483648)到231 - 1(即2147483647)。此外,Java还支持八进制(以0开头)、十六进制(以0x或0X开头)的字面量表示法,以及二进制(从Java 7开始,以0b或0B开头)的字面量表示法。
代码示例:
int a = 123456; // 十进制
int d = 0b1010; // 二进制字面量,等于十进制的10
int b = 0123; // 八进制字面量,等于十进制的83
int c = 0xABC; // 十六进制字面量,等于十进制的2748
注意事项:
- 如果尝试赋值一个超出int类型范围的字面量给int变量,Java编译器会报错。
- 不同进制的字面量最终都会被转换为十进制数,如果转换后的值超出了int类型的范围,同样会导致编译错误。
长整型(long)字面量
**解释:**长整型(long)是一个64位有符号整数类型。其字面量表示法允许我们直接在代码中指定一个长整型值。为了区分普通的整型字面量(int)和长整型字面量(long),Java要求我们在长整型字面量的末尾加上一个大写的L
或小写的l
。此外,长整型字面量也可以像整型字面量一样使用八进制(以0开头)、十六进制(以0x或0X开头)和二进制(以0b或0B开头)的表示法,只需要在末尾添加L
或l
即可。
代码示例:
long a = 123456789012345678L; // 十进制
long b = 0123456789012345678L; // 八进制
long hexLongLiteral = 0xABCDEF0123456789L; // 十六进制
long binaryLongLiteral = 0b10101010101010101010101010101010L; // 二进制
注意事项:
- 在长整型字面量的末尾加上一个大写的
L
或小写的l
。 - 如果没有在字面量末尾添加
L
或l
,而该字面量的值又超出了int类型的范围,那么Java编译器会报错,因为它会尝试将字面量解析为int类型。 - 如果非十进制表示的字面量转换后的值超出了长整型的范围,同样会导致编译错误。
单精度浮点数(float)
解释:float
类型的字面量用于表示单精度浮点数。单精度浮点数占用32位内存空间。要指定一个float
类型的字面量,你需要在数值后面加上f
或F
后缀。如果不加这个后缀,且数值范围超出了int
类型能表示的范围,那么Java编译器会默认将其视为double
类型。
代码示例:
float a = 3f;
float b = -2.12F;
float c = 3.14e5F; // 科学计数法(3.14e5表示3.14的五次方)
float d = -3.14E-5f;
float e = .5f; // .5表示为0.5
注意事项:
- 需要在末尾加一个大写的
F
或小写的f
,不加默认解析为double
类型。 - 如果试图将一个
double
类型的字面量赋值给一个float
类型的变量,除非进行了显式类型转换float floatLiteral7 = (float) 123.456;
。 - 由于精度限制问题,可能会导致精度损失,导致最终数据结果不准确,慎用。
双精度浮点数(double)
解释:double
类型的字面量用于表示双精度浮点数。双精度浮点数占用64位内存空间,相比float
类型提供了更高的精度和更大的数值范围。double
类型的字面量不需要任何特定的后缀,因为Java编译器默认将不带后缀的小数字面量或科学计数法表示的字面量视为double
类型。如果想要避免混淆或者强迫症的话可以在字面量的末尾添加D
或d
后缀。
代码示例:
double a = 123.456; // 不加d,默认就是double类型
double b = -987.654d; // 加d,还是double类型
double c = 3.14E-05; // 科学计数法(3.14E-05表示3.14的-5次方)
注意事项:
- 虽然精度相对float更高,但是如果应用领域对小数点后的位数要求比较高则不适合使用。
- 当字面量值很大或者与
float
类型的字面量混合使用时,建议不要省略D
或d
后缀。
布尔值(boolean)
**解释:**用于表示逻辑值,它只有两个可能的字面量:true
和false
。这两个字面量用于表示逻辑上的真和假。
代码示例:
boolean a = true; // 声明一个boolean变量并初始化为true
boolean b = false; // 声明一个boolean变量并初始化为false
注意事项:
boolean
类型通常用于条件语句(如if
、while
、for
等)中,以确定程序的执行流程。你也可以使用逻辑运算符(如&&
、||
、!
)来组合多个boolean
字面量或变量,以形成更复杂的条件表达式。- Java是强类型语言,这意味着你不能将非
boolean
类型的值(如整数、字符串等)直接赋给boolean
类型的变量,除非进行了显式的类型转换。
字符(char)
解释:char
类型用于表示单个字符,其字面量表示方法是将字符用单引号(’ ')括起来。char
类型可以存储任何Unicode字符,包括字母、数字、标点符号、特殊符号等。Java中的char
类型实际上是Unicode字符集的一个编码单元,它使用16位(即2个字节)来表示一个字符。因此,它可以表示65,536个不同的字符。
代码示例:
char a = 'a'; // 声明一个char变量并初始化为字符'a'
char b = '1'; // 声明一个char变量并初始化为字符'1'
char c = '@'; // 声明一个char变量并初始化为字符'@'
char d = '\n' // 换行符的字面量,它其实是一个转义字符
注意事项:
- Java中的字符串(
String
类型)是由char
数组组成的,但字符串字面量是用双引号(" ")括起来的。而char
字面量则必须使用单引号。 - 有时候可能会遇到
\
开头的字符,不用惊讶。因为它可能是转义字符,在字符中用于表示那些无法直接通过字面量表示的字符,或者表示在当前上下文中具有特殊含义的字符。这些转义字符以反斜杠“\”开始,后跟特定的字符序列,从而赋予字符不同的含义。
字符串(String)
解释:String
字面量是指直接出现在代码中的双引号括起来的文本。
代码示例:
String a = ""; // 什么也不写的
String b = " "; // 单空格的
String c = "hello world"; // 带空格的
String d = "hello world\n"; // 带转义字符的
注意事项:
- 只要是用
""
引起来的内容它就是字符串。哪怕不写,它也是一个字符串。 - 不是使用new创建的字符串,如果内容相同那么用
==
判断相等的结果是true,但是如果这个字符串是通过new创建的,那么即便内容相同使用==
判断的结果也是false,此时应该使用.equals()
来判断两个字符串内容是否相等。总之如果比较内容,建议使用.equals()
,因为使用==
来判断字符串的逻辑关系的时候比较的是对象的引用是否相同,new的字符串引用当然不同了。
空(null)
解释:null
是一个特殊的字面量,它表示一个变量没有引用任何对象。null
是所有引用类型的默认值,意味着当你声明一个引用类型的变量但没有给它赋值时,它将自动被初始化为null
。
代码示例:
String str = null; // 声明一个String变量并初始化为null
Object obj = null; // 声明一个Object变量并初始化为null
注意事项:
-
在Java中,
null
不能赋给基本数据类型(如int
,char
,
boolean
等),只能赋给引用类型(如类、接口、数组等的实例)。试图将null
赋给基本数据类型将导致编译错误。 -
由于
null
没有引用任何对象,任何对null
的引用调用方法或访问字段都会导致NullPointerException
。因此,在使用可能为null
的引用之前,通常需要进行null
检查以避免程序崩溃。 -
null不是一个数据类型,而是一种特殊的值,用于表示一个引用类型变量没有引用任何对象。
编写不易,如果出现错误,望告知。