“朋友,真羡慕你。学习新事物真是太好了!今天有一个有趣的新话题等着你——文字。”

“显然我应该说我是这个星球上最快乐的机器人学生,Rishi。好吧,我准备好吸收新知识了!”

“让我们马上开始吧。文字是直接写在程序代码中的特定数据。我们不是在谈论任何数据。我们只是在谈论原始类型和字符串。

例如,假设您有以下代码:

代码 文字
int a = 5;
int b = a + 10;
String s = "Sum=" + (a + b);
5
10
"Sum="

“这段代码中的文字是数字5、数字10和字符串‘ Sum = ’。

整数文字

“在 Java 中,一切,包括文字,都有一个类型。代码中的所有整数文字(整数)都是int。int 类型是标准的 Java 整数类型。”

“我知道这种,我用过。”

“你还记得除 int 之外的其他整数类型吗?一些占用内存空间较小的整数类型?”

“当然!字节和短。”

“就是这些。因此,如果在您的代码中您决定将整数文字分配给 byte 或 short 类型的变量,则不会有任何问题。主要的是文字值位于值的范围内变量的类型可以存储。Java 编译器足够聪明,可以理解一个字节变量可以被赋值为整数文字 100。

例子:

代码 描述
int a = 300;
这将编译得很好。
byte a = 100; 
这将编译得很好。
byte a = 300; 
会出现编译错误,因为最大字节值为 127。

“那款呢?”

“我们也可以在代码中编写这种类型的文字。为此,请在整数末尾添加拉丁字母‘L’或‘l’。

例子:

代码 描述
long a = 3000000000L; 
这将编译得很好。
long a = 3000000000; 
编译错误:30 亿对于 int 文字来说太大了。
int a = 3000000000L; 
编译错误:字面量是long,变量是int。此外,30 亿比最大整数还多。

“你有没有注意到阅读 10 位或更多数字的大量数字是多么困难?

“是的,如果你没有启用你的 robovision,那么我们谈论的是 30 亿还是 30 将不会立即变得清晰。”

“为了使代码更具可读性(这很重要!),Java 允许在数字文字中插入下划线(它们不会影响数字的值)。

“上面的例子可以用下划线重写,使它更清楚一点:

代码 描述
long a = 3_000_000_000L; 
这将编译得很好。
long a = 3_000_000_000; 
编译错误:30 亿对于 int 文字来说太大了。
int a = 3_000_000_000L; 
编译错误:字面量是long,变量是int。此外,30 亿比最大整数还多。

“这样读起来更方便,虽然用逗号代替下划线会更熟悉!”

“但我们不能在数字文字中使用逗号,因为它们已经用于其他目的。例如,用于在调用方法时将参数彼此分开。

实数文字

“您可能已经猜到,在您的代码中,您不仅可以指定整数,还可以指定浮点文字(实数)。”

“双打和花车?”

“是的。实际上,规则很简单:如果代码中的数字中有小数点,那么该数字就是浮点数。而且不仅仅是任何文字,而是双精度文字。要创建浮点文字你需要在数字末尾加上字母“F”(或“f”)

例子:

代码 描述
double a = 100.0; 
这将编译得很好。
double a = 100.;
这将编译得很好。
double a = .0;
这将编译得很好。
float a = 100.0f; 
这将编译得很好。
float a = 100.0; 
会出现编译错误:变量是float,但字面量是double。

“顺便说一句,您可以通过简单地附加后缀“F”(对于float)或 D(对于double)将整数文字显式转换为 float 或 double 文字。示例:

代码 描述
double a = 100D; 
这将编译得很好。
float a = 100F; 
这将编译得很好。
int a = 300D; 
会出现编译错误:变量是 int,但字面量是double

“浮点文字可以使用科学记数法:除了数字的带符号部分,您还可以指定十的幂。示例:

文字 数学符号 最终价值
1.232 1.23*10 2 123.0
1.233 1.23*103 1230.0
1.23-6 1.23*10 -6 0.00000123
16 1.0 *10 6 1000000.0
1电子-10 1.0*10 -10 0.0000000001

字符串文字

“您还可以在代码中指定整行文本。为了告诉编译器将字符串视为数据(文字)而不是代码的一部分,整个字符串两边都用双引号括起来。

"如果一行代码中有多个双引号,则将它们分成一对。第一个双引号表示文字的开始。下一个表示文字的结尾。之后的下一个再次标记新文字的开始。下一个标记第二个文字的结尾。依此类推。

“每个这样的文字都是一个String

例子

代码 解释
"+"+"+"+"+"+"+"+"+"
一行有 5 个文字。它们中的每一个都由一个“+”字符组成
""
这个文字是一个空字符串。没有字符的字符串。
"2+3"+"-5"
这里有两个字面量。结果将是字符串“2+3-5”,而不是数字
"return"+";"
这里还有两个文字。这里没有返回语句。

“如果字符串文字太长,可以将其分成几行并用‘加号运算符’粘在一起:

代码 解释
String s = "I hold it true, whate'er befall"
         + "I feel it when I sorrow most;"
         + "'Tis better to have loved and lost"
         + "Than never to have loved at all.";
如果将此行输出到屏幕,那么所有文本将显示在一行中!

字符文字

“如果我需要的文字是单个字符而不是字符串怎么办?我应该创建一个由单个字符组成的字符串吗?”

“不,在那种情况下你需要一个类型为.的文字char。你能猜出这样一个文字的开始和结束是如何指定的吗?”

“单引号?”

"是的,单引号内必须有一个字符,而且只有一个字符。不能使用空单引号。

例子:

代码 解释
'A'
类型为 char 的文字。它包含拉丁字母“A”。
'@' 
类型为 char 的文字。它包含“@”符号
'' 
类型为 char 的文字。它包含一个日语字符。而这也是可能的。
'\u1f3a'
类型为 char 的文字。它包含一个由其编号指定的 Unicode 字符。

“最后一个示例使用特殊符号分配 Unicode 字符:首先我们有前缀\u,然后是 4 个十六进制字符。您将在下一课中了解更多相关信息。”