在Java中,为什么int a=('a'+'b'+'c');的输出是不同的形式 System.out.println('a'+'b'+'c'+"")
In Java, why the output of int a=('a'+'b'+'c'); are different form System.out.println('a'+'b'+'c'+"")
原题是这样的
public class test {
public static void main(String[] args){
int i = '1' + '2' + '3' + "";
System.out.println(i);
}
}
这给了我一个错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from String to int
然后我把代码改成这样:
public class test {
public static void main(String[] args){
int i = '1' + '2' + '3';
System.out.println(i);
}
}
输出是 150。
但是当我这样写代码时:
public class test {
public static void main(String[] args){
System.out.println('a'+'b'+'c'+"");
}
}
输出变成294。
不知道为什么。
- 第一个不编译,因为你在末尾连接了一个字符串,这导致值是一个不能直接转换为 int 的字符串。
- 第二个的输出是150,因为字符1、2、3的ASCII值是49、50、51,return加法时是150。
- 最后一个的输出是 294,因为你在 ASCII 中做 char 值的加法 table (97+98+99)
您可以验证 a、b 和 c(或任何其他字符)的值 here。
编辑: 为了解释为什么最后一个输出正确的值而不是抛出错误,您首先将所有值相加,如前所述,然后将其转换为字符串添加"" 到字符的 ASCII 值的总和。但是,println 方法需要一个字符串,这就是它不会抛出任何错误的原因。
如果你愿意,第一个就可以了Integer.parseInt('1' + '2' + '3' + "");
第一个是不可能的,因为你无法通过这种方式将 String
转换为 int
。
第二个有效,因为 char
s 是一种数字,所以添加 char
s 就是添加它们真正的数字。 Char '1'
是数字 49(见 ASCII table),所以总和是 49+50+51 即 150.
第三个以这种方式工作,因为 +
是左括号运算符,这意味着 'a'+'b'+'c'+""
应读作 (('a'+'b')+'c')+""
。 'a'
有 ASCII 码 97,所以你有 294+""
。然后 Java 知道应该将值转换为 String
才能连接两个字符串。最后你有字符串 294
。将您最后的代码修改为以下 System.out.println('a'+'b'+('c'+""));
,您将看到结果将是 195c
.
您必须注意 System.out.println
是一种用于将值(不同类型)转换为它们的 String
表示的方法。这总是可能的,因为每个 int
都可以转换为它的 String
表示,但反之则不行;不是每个 String
都是 int
的代表(所以 Java 不会让你这么简单地做)。
当你这样做时
int i = '1' + '2' + '3';
JVM 对给定数字的 ASCII 码求和。结果是 150.
当您添加空 String
时,您试图将 int
/char
与 String
相加。这不可能。您可以将 char
隐式转换为 int
,反之亦然,因为它们是基本类型。您不能对 String
对象执行此操作,因为它们不是基元而是引用。这就是您收到错误的原因。
当您执行 println
时,原始值首先被求和并自动 装箱 为引用类型,因此总和被装箱到 Character
对象中.空 String
转换为 Character
,然后添加到第一个。所以结果是一个具有 ASCII 代码 294 的 Character
对象。然后调用 Character
的 toString
方法,因为这就是 println(Object)
方法的作用。结果是 294
我希望这能帮助您了解正在发生的事情:)
首先:[int i = '1' + '2' + '3' + "";]
如果你concat一个空字符串值,你把它转换成一个String对象,然后String对象不能转换成int。
第二个:[int i = '1' + '2' + '3';]
char 上的二进制算术运算提升为 int。它等于:
[int i = 49 + 50 + 51] - 总计:150.
第三个:[System.out.println('a'+'b'+'c'+"");]
在这种情况下,您将 'a' + 'b' + 'c'(即 294)转换为 String (+""),然后像 String 值一样打印结果,这样就可以了。
原题是这样的
public class test {
public static void main(String[] args){
int i = '1' + '2' + '3' + "";
System.out.println(i);
}
}
这给了我一个错误:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from String to int
然后我把代码改成这样:
public class test {
public static void main(String[] args){
int i = '1' + '2' + '3';
System.out.println(i);
}
}
输出是 150。
但是当我这样写代码时:
public class test {
public static void main(String[] args){
System.out.println('a'+'b'+'c'+"");
}
}
输出变成294。
不知道为什么。
- 第一个不编译,因为你在末尾连接了一个字符串,这导致值是一个不能直接转换为 int 的字符串。
- 第二个的输出是150,因为字符1、2、3的ASCII值是49、50、51,return加法时是150。
- 最后一个的输出是 294,因为你在 ASCII 中做 char 值的加法 table (97+98+99)
您可以验证 a、b 和 c(或任何其他字符)的值 here。
编辑: 为了解释为什么最后一个输出正确的值而不是抛出错误,您首先将所有值相加,如前所述,然后将其转换为字符串添加"" 到字符的 ASCII 值的总和。但是,println 方法需要一个字符串,这就是它不会抛出任何错误的原因。
如果你愿意,第一个就可以了Integer.parseInt('1' + '2' + '3' + "");
第一个是不可能的,因为你无法通过这种方式将 String
转换为 int
。
第二个有效,因为 char
s 是一种数字,所以添加 char
s 就是添加它们真正的数字。 Char '1'
是数字 49(见 ASCII table),所以总和是 49+50+51 即 150.
第三个以这种方式工作,因为 +
是左括号运算符,这意味着 'a'+'b'+'c'+""
应读作 (('a'+'b')+'c')+""
。 'a'
有 ASCII 码 97,所以你有 294+""
。然后 Java 知道应该将值转换为 String
才能连接两个字符串。最后你有字符串 294
。将您最后的代码修改为以下 System.out.println('a'+'b'+('c'+""));
,您将看到结果将是 195c
.
您必须注意 System.out.println
是一种用于将值(不同类型)转换为它们的 String
表示的方法。这总是可能的,因为每个 int
都可以转换为它的 String
表示,但反之则不行;不是每个 String
都是 int
的代表(所以 Java 不会让你这么简单地做)。
当你这样做时
int i = '1' + '2' + '3';
JVM 对给定数字的 ASCII 码求和。结果是 150.
当您添加空 String
时,您试图将 int
/char
与 String
相加。这不可能。您可以将 char
隐式转换为 int
,反之亦然,因为它们是基本类型。您不能对 String
对象执行此操作,因为它们不是基元而是引用。这就是您收到错误的原因。
当您执行 println
时,原始值首先被求和并自动 装箱 为引用类型,因此总和被装箱到 Character
对象中.空 String
转换为 Character
,然后添加到第一个。所以结果是一个具有 ASCII 代码 294 的 Character
对象。然后调用 Character
的 toString
方法,因为这就是 println(Object)
方法的作用。结果是 294
我希望这能帮助您了解正在发生的事情:)
首先:[int i = '1' + '2' + '3' + "";] 如果你concat一个空字符串值,你把它转换成一个String对象,然后String对象不能转换成int。
第二个:[int i = '1' + '2' + '3';] char 上的二进制算术运算提升为 int。它等于: [int i = 49 + 50 + 51] - 总计:150.
第三个:[System.out.println('a'+'b'+'c'+"");] 在这种情况下,您将 'a' + 'b' + 'c'(即 294)转换为 String (+""),然后像 String 值一样打印结果,这样就可以了。