在Java中,字面值(literal)是指人类可读的语言形式出现的固定值.例如,数值100就是一个字面值.字面值也常被称为常量(constant).大部分字面值和他们的用法都是非常直观的,前面的示例程序都已经以各种形式使用到他们了.现在正式的解释他们.
Java字面值可以是任何基本数据类型.每一个字面值的表示方式都依赖于他的类型.正如前面解释的,字符常量是包含在单引号中的.例如’a’和’%’都是字符常量.
整数字面值被指定为没有小数部分的数.例如,10和-100是整数字面值.浮点型字面值需要在小数部分的前面使用小数点.例如11.123就是一个浮点字面值.Java也允许对浮点数使用科学计数法.
默认情况下,整数字面值是int类型.如果想指定一个long类型的字面值,就附加一个l或L.例如12是int类型,而12L就是long类型.
默认情况下,浮点字面值都是double类型,如果你想指定了一个float字面值,可以在常量后附加一个f或F.例如10.18F就是float类型.
尽管默认情况下整数字面值创建的是一个int值,但是仍然可以把他们付给诸如char,byte,short类型的变量,只要该值可以由这些类型表示即可.整数字面值总是可以被赋给一个long变量.
从JDK7开始,可以在整数或浮点数字面值中嵌入一个或多个下划线,以方便阅读包含多个数位的值.编译字面值时将丢弃下划线,如123_45_678值为12345678
1.十六进制,八进制和二进制字面值
你可能已经知道,在程序设计中使用基于8或16的数值系统比使用基于10的数值系统要简单.基于8的数值系统称为八进制.使用数值是0~7.在八进制中,数字10等于十进制中的8.基于16的数值系统称为十六进制,使用数字0~9字母A~F,这几个字母分别代表10,11,12,13,14,15.例如十六进制数10在十进制中等同于16.因为这两个数值系统经常使用,所以Java允许指定十六进制或八进制的整数字面值来取代十进制的整数字面值.十六进制字面值必须以0x或0X开始,而八进制字面值要以0开始.
public static void main(String args[]) { int a,b; a = 0xFF; System.out.println("a:"+a); b = 011; System.out.println("b:"+b); }
输出:
a:255 b:9
2.字符转义序列
对于多数可打印字符而言,将字符常量包含在单引号中是可以正常工作的,但是对于一些字符,如回车换行符.在使用文本编辑器时就会产生问题.此外,某些其他字符(如单引号,双引号)在Java中也有特殊的意义.所以,也不能直接使用他们,出于这些原因,Java提供了特殊的转义序列(escape sequence),有时称为反斜杠字符常量,这些转义序列用于替代他们说代表的字符.
转义序列
|
描述
|
\’
|
单引号
|
\”
|
双引号
|
\\
|
反斜杠符号
|
\r
|
回车符号
|
\n
|
换行符号
|
\f
|
换页符号
|
\t
|
水平制表符
|
\b
|
退格符号
|
\ddd
|
八进制常量符号
|
\uxxx
|
十六进制常量符号
|
3.字符串字面值
Java支持另一种类型的字面值,即字符串(String).字符串是包含在双引号内的一组字符,例如: “test”就是一个字符串,在前面的示例程序中,已经在语句println()中看到了许多字符串示例.除了普通字符串以外,字符串字面值也可以包含一个或多个前面讲到的转义序列.例如,考虑下面的问题,他使用\n和\t转义序列.
public static void main(String args[]) { System.out.println("Frist line\nSecond line"); System.out.println("A\tB\tC"); }
输出:
Frist line Second line A B C
问:由单个字符组成的字符串与字符串字面值一样吗?例如K与k一样吗?
答:不一样,一定不要把字符串与字符相混淆.字符字面值表示char类型的字母.字符串哪怕只包含一个字母也是字符串.尽管字符串由字符组成,但他们是不同的类型.
注意:转义序列是如何用于生成新的一行的.不需要使用多条println()语句来得到多行输出,只需要将\n嵌入到较长的字符串中需要换行的位置即可.