在Java中,为什么输出int a =(' a' +' b' +' c');是不同的形式System.out.println(' a' +'' +' c' +"")

时间:2015-02-17 14:48:24

标签: java

原始问题是这样的。

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。

我想知道为什么。

4 个答案:

答案 0 :(得分:7)

  • 第一个不编译,因为你在结尾连接一个String,导致该值为一个不能直接转换为int的String。
  • 第二个的输出是150,因为字符1,2,3的ASCII值是49,50,51,在添加时返回150.
  • 最后一个的输出是294,因为你在ASCII表中添加了char值(97 + 98 + 99)

您可以验证a,b和c(或任何其他字符)的值here

编辑:要解释为什么最后一个输出正确的值而不是抛出错误,首先按照前面的说明对所有值求和,然后将其转换为字符串,将“”添加到总和中字符的ASCII值。但是,println方法需要一个String,这就是它不会抛出任何错误的原因。

如果你做Integer.parseInt('1' + '2' + '3' + "");

,那么第一个就可以了

答案 1 :(得分:2)

当你这样做时

int i = '1' + '2' + '3';

JVM对给定数字的ASCII码求和。结果 150

当您添加空String时,您尝试将int / charString相加。这是不可能的。您可以将char隐式转换为int,反之亦然,因为它们是原始类型。您无法对String个对象执行此操作,因为它们不是基元而是引用。这就是你收到错误的原因。

当您执行println时,首先将原始值相加并将自动装箱转换为引用类型,以便将总和框装入Character对象。空String转换为Character,然后添加到第一个Character。因此结果是toString对象具有ASCII码294.然后调用Character的{​​{1}}方法,因为这是println(Object)方法的作用。结果是 294

我希望这能帮助您了解正在发生的事情:)

答案 2 :(得分:0)

第一个是不可能的,因为您无法通过这种方式将String转换为int

第二个有用,因为char是一种数字,所以添加char s就是添加它们真正的数字。 Char '1'是数字49(参见ASCII表),因此总和为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不会让你这么简单)。

答案 3 :(得分:0)

首先:[int i =' 1' +' 2' +' 3' +"";] 如果连接空字符串值,则将其转换为String对象,然后String对象不能转换为int。

第二:[int i =' 1' +' 2' +' 3';] char上的二进制算术运算提升为int。它等于: [int i = 49 + 50 + 51] - 总数:150。

第三:[System.out.println('' +'' +' c' +"");] 在这种情况下,您可以转换' a' +' b' +' c' (即294)到String(+"")然后打印结果就像一个字符串值,并且工作正常。