整数参数在Java中被解释为String参数

时间:2017-10-05 12:03:10

标签: java

代码:

class Foo 
{
    public static void main(String[] args)
    { 
        int x[] = new int[5];
        for(int i=0;i<5;i++)
            x[i]=i*i;

        for(int i=0;i<5;i++)
        {
            System.out.println("Value #" + i+1 + " = " + x[i]);
        }
    }
}

输出:

tk@insomniac-tk:~$ java Foo
Value #01 = 0
Value #11 = 1
Value #21 = 4
Value #31 = 9
Value #41 = 16

那么,这里发生了什么?我在哪里弄乱我的java代码?我的意思是为什么在Java中,i+1字面意思是i concat 1

8 个答案:

答案 0 :(得分:4)

{{1}}

试试这个

答案 1 :(得分:4)

Strings +运算符用于连接,因为您没有指定任何括号,i1也是连贯的,您需要使用用括号明确表示它们是一起求和的:

for (int i = 0; i < 5; i++) {
    System.out.println("Value #" + (i + 1) + " = " + x[i]);
}

获得:

Value #1 = 0
Value #2 = 1
Value #3 = 4
Value #4 = 9
Value #5 = 16

接下来,使用IntStream的另一种方式,它将执行相同的操作:

IntStream.range(0, 5)
         .mapToObj(i -> "Value #" + (i + 1) + " = " + (i * i))
         .forEach(System.out::println);

答案 2 :(得分:2)

+表示像concat这样的东西,如果你想要评估表达式将它放入括号

  

(i + 1)不是i + 1

答案 3 :(得分:2)

这一行:

"Value #" + i+1 + " = " + x[i]

特别是

new StringBuffer().append("Value #")
                  .append(i)
                  .append(1)
                  .append(" = ")
                  .append(x[i])
                  .toString();

以下代码的语法糖:

"Value #" + (i+1) + " = " + x[i]

你想要的是这个:

new StringBuffer().append("Value #")
                  .append(i+1)
                  .append(" = ")
                  .append(x[i])
                  .toString();

哪个会转换为

NSMutableArray

答案 4 :(得分:2)

因为在这种情况下,Java会将i附加到您的String,然后将1附加到您的String。

要首先评估该值(并生成您期望的结果),您必须使用括号通知Java您要在附加值之前评估该值:

System.out.println("Value #" + (i+1) + " = " + x[i]);

<强>输出

Value #1 = 0
Value #2 = 1
Value #3 = 4
Value #4 = 9
Value #5 = 16

答案 5 :(得分:2)

Java和C ++程序不同的关键原因是因为使用的运算符不同:

+

<<运算符有一个higher precedence,因此在重载的+运算符之前完成了添加。

在Java版本中,它全部是{{1}},所以它们都是从左到右评估的。

答案 6 :(得分:0)

问题出现在system.out.println(“”);,其中所有整数在使用(+)添加字符串变量时将并入字符串。尝试使用整数和字符串变量进行不同操作的不同代码。

答案 7 :(得分:-2)

您不能简单地将整数添加到字符串中。您必须使用Integer.toString(int)将整数转换为字符串,然后将返回的值添加到字符串中。