1. 为什么需要类型转换?
Java——是一种强类型语言。如果计算机有一个“数字的盒子”,你却试图往里塞文本——这就和把叉子插进 USB 接口一样。编译器可不会原谅你!😡
不过,在实际工作中我们经常同时处理不同的数据类型。比如,你有一个包含数字的字符串。这时就需要进行转换(或“类型变换”)。
来看一个例子。假设你要保存用户数量:
int a = 1;
int b = "2";
int c = "三";
编译器会立刻说:“你把我当什么了?我可不会自动把字符串转换成数字,离不开你。必须显式地把字符串转换为数字。”
在 Java 中有多种转换方式——各有优缺点和常见坑。
2. 将 int 转换为 String
工作中经常需要得到数字的字符串表示:例如,用于输出到屏幕、保存到文件、通过网络传输、与文本拼接等。在 Java 中有多种方法可用,不同场景各有适用性。
String.valueOf() 函数
这是最主要、最常用的方法:
int number = 42;
String str = String.valueOf(number); // str == "42"
String.valueOf() 会把传入对象的值转换为与其类型相对应的字符串。
与空字符串拼接
一种老但可用的方法:
int number = 42;
String str = "" + number;
这种方式在简单场景下很快捷,但对阅读代码的人不够直观。
3. 隐式转换为字符串
如上所述,Java 的设计使得在 Java 中几乎所有变量、对象、表达式都可以转换为 String。
此外,当我们把 String 与其他类型相加时,这种转换会自动发生。示例:
int a = 5;
String name = "Anya" + a; // name 包含字符串 Anya5
int a = 5;
String city = a + "New York" + a; // city 包含字符串 5New York5
int number = 10;
String code = "Yo";
String message = "Hello! " + number + code; // message 包含字符串 Hello! 10Yo
在这三个示例中,我们把 int 与 String 相加,结果始终是 String 类型。
示例:
int a = 5;
String name = "1" + a; // name 包含字符串 15
int a = 5;
String city = a + "9" + a; // city 包含字符串 595
int number = 10;
String code = "10";
String message = "" + number + code; // message 包含字符串 1010
加法从左到右执行,因此结果可能会有些出乎意料。例:
int a = 5;
String name = a + a + "1" + a; // name 包含字符串 1015
执行顺序: ((a + a) + "1") + a
4. 将字符串转换为数字
在 Java 中要把数字转换为字符串,只需与空字符串相加:
String str = "" + chislo;
那如果需要把字符串转换成数字呢?并不是任意字符串都能转换成数字。但如果字符串只包含数字字符,是可以的。为此,在 Java 中有专门的函数。
命令如下:
int x = Integer.parseInt(stroka);
其中,int x 是对整型变量 x 的声明,而 stroka 是以字符串形式给出的数字(仅由数字组成的字符串)。
示例:
String str = "123";
int number1 = Integer.parseInt(str); // number1 包含数字 123;
int number2 = Integer.parseInt("321"); // number2 包含数字 321
int number3 = Integer.parseInt("321" + 0); // number3 包含数字 3210
int number4 = "321"; // 无法编译:变量是 int 类型,而值是 string 类型
对负数同样适用:函数 Integer.parseInt() 很聪明。
GO TO FULL VERSION