字符串和运算符
目标
- 了解实例化 String 对象和设置其值的多种方法
- 了解字符串串联和方法链
- 熟悉 Java 语言的算术运算符
字符串
目前为止,您已经遇到过多种类型的 String。在 Java 语言中,字符串是 String 类型的一级对象,包含可帮助您处理它们的方法。
在 C 语言中,处理字符串需要大量精力,因为它们是您必须操作的 8 位字符组成的以 null 结尾的数组。(在字符串方面,与 C 语言最接近的 Java 代码是 char 原语数据类型,它可以包含单个 Unicode 字符,比如 a。)
以下是两种创建字符串的方法,我们以创建一个名为 greeting 且值为 hello 的 String 实例为例:
greeting = new String("hello");
String greeting = "hello";
因为 String 是一级对象,所以可以使用 new 实例化它们。将一个 String 类型的变量设置为字符串字面常量具有相同的结果,因为 Java 语言会创建一个 String 对象来持有该字面常量,然后将该对象分配给该实例变量。
串联字符串
可以使用 String 完成许多事情,该类有许多很有帮助的方法。甚至还没有使用方法,您就已经在 Person 类的 testPerson() 方法中通过串联或组合两个 String 完成了一些有趣的事情:
l.info("Name: " + p.getName());
加号 (+) 是 Java 语言中串联 String 的缩写。(在循环内执行这种串联会影响性能,但目前而言,无需担心这一点。)
串联练习
现在,您可以尝试在 Person 类内串联两个 String 字符串。此刻您有一个 name 实例变量,但在业务应用程序中拥有一个 firstName 和 lastName 会更符合实际。然后可在另一个对象请求 Person 的全名时串联它们。
返回到 Eclipse 项目,首先添加新实例变量(在源代码中目前定义 name 的相同位置):
//private String name;
private String firstName;
private String lastName;
注释掉 name 定义;您不再需要它,因为已将它替换为 firstName 和 lastName。
链式方法调用
现在,告诉 Eclipse 代码生成 firstName 和 lastName 的 getter 和 setter(如有必要,请参阅 第 5 单元)。然后删除 setName() 和 getName() 方法,添加一个新的 getFullName() 方法,使代码类似于:
public String getFullName() {
return getFirstName().concat(" ").concat(getLastName());
}
此代码演示了方法调用链。调用链是一种经常用于不可变对象(比如 String)的技术,在调用链中,修改一个不可变对象始终会返回修改的对象(但不会更改原始对象)。然后处理返回的已更改的值。
运算符
您可能已经看到,Java 语言使用 = 预算法将值赋给变量。正如您可能想到的,Java 语言可执行算术运算,而且它也使用运算符实现此目的。现在我将简要介绍一下您随着技能的提升需要使用的一些 Java 语言运算符。
Java 语言使用两种类型的运算符:
- 一元:仅需要一个操作数。
- 二元:需要两个操作数。
表 1 总结了 Java 语言的算术运算符:
表 1. Java 语言的算术运算符
运算符 | 用法 | 描述 |
---|---|---|
+ | a + b | 将 a 和 b 相加 |
+ | +a | 如果 a 为 byte 、short 或 char ,则将它升级为 int |
- | a - b | 从 a 中减去 b |
- | -a | 求 a 的算术负数 |
* | a * b | 将 a 和 b 相乘 |
/ | a / b | 将 a 除以 b |
% | a % b | 返回将 a 除以 b 的余数(模运算符) |
++ | a++ | 将 a 递增 1;计算递增之前 a 的值 |
++ | ++a | 将 a 递增 1;计算递增之后 a 的值 |
-- | a-- | 将 a 递减 1;计算递减之前 a 的值 |
-- | --a | 将 a 递减 1;计算递减之后 a 的值 |
+= | a += b | a = a + b 的简写 |
-= | a -= b | a = a - b 的简写 |
*= | a *= b | a = a * b 的简写 |
%= | a %= b | a = a % b 的简写 |
其他运算符
除了表 1 中的运算符,我们还了解了其他一些在 Java 语言中称为运算符的符号,包括:
- 句点 (.),它限定包的名称并调用方法
- 圆括号 (()),它限定一个方法的逗号分隔的参数列表
- new,(后跟一个构造方法名称时)它实例化一个对象
Java 语言语法还包含一些专门用于条件编程的运算符 — 即用于根据不同输入做出不同响应的程序。下一单元将介绍这些运算符。