整数参数被解释为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

public 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]);
        }
    }
}

尝试此

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);

表示concat之类的东西,如果您希望将表达式评估到括号中

(i 1)不是i 1

此行:

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

,特别是

"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();

,因为在这种情况下,Java将i附加到您的字符串,然后将1个附加到您的字符串。

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

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

输出

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

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

System.out.println("Value #" + i+1 + " = " + x[i]); // Java
cout << "Value # " << i + 1 << " =  " << x[i] << endl; // C++

+操作员具有更高的优先级,因此在超载<<运算符之前进行了添加。

在Java版本中,它都是+ s,因此它们都从左到右进行评估。

问题在system.out.ut.println(");中,当使用( )与字符串变量添加( )时,所有整数都将串联到字符串中。整数和字符串变量。

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

最新更新