Java 中不同类型的串联
Concatenation of different types in Java
我知道,问题很简单。但是有一些小细节我需要完全理解(理解后台发生的事情非常重要)。我们先看段代码。为什么2个连续的“+”号不会在这里引起错误?或者在这 2 个“+”之间有一个看不见的 0?第一种情况,字符转换为整数的原因是连续2个“+”号,对吧?
public class AppleApp {
public static void main(String[] args) {
System.out.println("Apple is " + + '2' + " USD");
// OUTPUT: Apple is 50 USD
System.out.println("Apple is " + + 2 + " USD");
// OUTPUT: Apple is 2 USD
}
}
一个char
是一个数字,所以读作"Apple is " + (+'2') + " USD"
。
与整数的情况相同。
"Apple is " + + 2 + " USD"
是'parsed'如下:
("Apple is " + (+2) + " USD"
和 +2
只是.. 2. 就像 int x = +2;
是合法的一样。
这同样适用于 + + '2'
,因为在 java 中,字符是数字(即使是字符串)也不是。 '2'是数字0x32
(字符2的unicode代码)。
char
有点奇怪的类型;它是 数字。具体来说,一个char表示一个0到65535之间的数字,就像一个byte是-128到+127,short是-32768到+32767,int是-2147483648到2147483647。
尽管它是一个数字,但所有打印内容的相关方法都将数字视为 unicode 值:它们在 unicode table 中查找数字并显示字符,即:
char c = 65;
System.out.println(c);
打印 A
。这不是因为 char
中固有的任何东西,而是因为 println
方法。
在java、byte
、short
、char
中劣势:很多操作不能对它们进行,而是先全部转成int .那是因为规范是这样说的。
因此,+'A'
是一个 int
类型的表达式。有点奇怪,但是,规范是这样说的。因此,System.out.println(+'A')
打印 65,因为它调用 int
版本的 println
只打印 65,而 System.out.println('A');
调用 char
版本,打印'A'
.
我知道,问题很简单。但是有一些小细节我需要完全理解(理解后台发生的事情非常重要)。我们先看段代码。为什么2个连续的“+”号不会在这里引起错误?或者在这 2 个“+”之间有一个看不见的 0?第一种情况,字符转换为整数的原因是连续2个“+”号,对吧?
public class AppleApp {
public static void main(String[] args) {
System.out.println("Apple is " + + '2' + " USD");
// OUTPUT: Apple is 50 USD
System.out.println("Apple is " + + 2 + " USD");
// OUTPUT: Apple is 2 USD
}
}
一个char
是一个数字,所以读作"Apple is " + (+'2') + " USD"
。
与整数的情况相同。
"Apple is " + + 2 + " USD"
是'parsed'如下:
("Apple is " + (+2) + " USD"
和 +2
只是.. 2. 就像 int x = +2;
是合法的一样。
这同样适用于 + + '2'
,因为在 java 中,字符是数字(即使是字符串)也不是。 '2'是数字0x32
(字符2的unicode代码)。
char
有点奇怪的类型;它是 数字。具体来说,一个char表示一个0到65535之间的数字,就像一个byte是-128到+127,short是-32768到+32767,int是-2147483648到2147483647。
尽管它是一个数字,但所有打印内容的相关方法都将数字视为 unicode 值:它们在 unicode table 中查找数字并显示字符,即:
char c = 65;
System.out.println(c);
打印 A
。这不是因为 char
中固有的任何东西,而是因为 println
方法。
在java、byte
、short
、char
中劣势:很多操作不能对它们进行,而是先全部转成int .那是因为规范是这样说的。
因此,+'A'
是一个 int
类型的表达式。有点奇怪,但是,规范是这样说的。因此,System.out.println(+'A')
打印 65,因为它调用 int
版本的 println
只打印 65,而 System.out.println('A');
调用 char
版本,打印'A'
.