在Eclipse IDE工作时,在Java中

  • 本文关键字:Java 工作 Eclipse IDE java
  • 更新时间 :
  • 英文 :


当我执行第一个代码时,我将获得以下输出(而预计会是其他代码)。现在,随着变化很小,结果是不同的。为什么是?

情况1

package mydemo;
public class hw {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("HelloWorld");
        int x =10;
        int y =20;
        int result = x + y;
        System.out.println(" result");

    }
}

输出:

HelloWorld
 result

情况2

package mydemo;
public class hw {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("HelloWorld");
        int x =10;
        int y =20;
        int result = x + y;
        System.out.println(" result = " + result);

    }
}

输出

HelloWorld
 result = 30

您两种情况下的唯一区别是传递给您的参数" println "函数:

在案例1:

System.out.println(" result");

此处参数"结果" (不应省略双引号)是字符串字面。它表示您在 double Quote 符号之间键入的单词本身,并且与您在上一行中定义的int variable result 无关。

因此,当您调用 prinln 时,该函数接收了一个字符串变量并将其打印到控制台。

在情况2:

System.out.println(" result = " + result);

,在上面的情况下,您将表达式"result = " + result传递给 println 函数,在您的情况下,即 String plus" plus int 变量操作。Java编译器将首先将您的表达式" result = " + result转换为字符串" result = 30",然后将其传递到 println 函数。

编译器对上述表达式所做的工作就像用以下代码替换它:

new StringBuilder(" result = ").append(result).toString();

将产生某种Java字节码如下:

12: invokespecial #26                 // Method java/lang/StringBuilder."<init>":(Ljava/lang/String;)V
15: iload_1       
16: invokevirtual #29                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
19: invokevirtual #33                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;

,如果您对编译器如何处理该表达式有兴趣:

也很有用:

字符串类如何覆盖 运算符?

当您告诉它:

System.out.println(" result");

它在括号中打印物品,即"结果"。引号围绕着"结果"一词表示它是字符串字面的。因此输出为

 result

在第二种情况下,这在括号中:

" result = " + result

您可以看到,我们仍然有一个字符串字面 - " result ="。您看到那里的+字符吗?那东西连接了东西。因此,在这里,它将"结果="与result连接。什么是result?由于它周围没有引号,因此它不是字符串的文字。在这里,result指的是称为result的变量的值。有什么价值?30!

这就是为什么它打印的原因:

 result = 30

最新更新