Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用eclipse IDE时,_Java - Fatal编程技术网

在java中使用eclipse IDE时,

在java中使用eclipse IDE时,,java,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; in

当我编写第一个代码时,我会得到以下输出(而它应该是其他的)。现在只要稍作改变,结果就不同了。为什么呢

案例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
当你告诉它:

System.out.println(" result");
它打印括号中的内容,即“结果”。单词“result”周围的引号表示它是字符串文字。所以输出是

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

" result = " + result
如您所见,我们仍然有一个字符串文本-“result=”。你看到那边的
+
字符了吗?那个东西连接着那个东西。因此,在这里,它将“result=”与
result
连接起来。什么是
结果
?因为它本身没有引号,所以它不是字符串文字。这里,
result
指的是名为
result
的变量的值。价值是什么?30!

这就是它打印的原因:

 result = 30

这两种情况的唯一区别是传递给您的参数“println”函数:

在案例1中:

System.out.println(" result");
这里的参数“result”(不应省略双引号)是字符串文字。它表示您在双引号符号之间键入的单词本身,与前一行中定义的int变量result无关

因此,当您调用prinln时,函数接收到一个字符串变量并按原样打印到控制台

在案例2中:

System.out.println(" result = " + result);
然而,在上述情况下,您将表达式
“result=“+result
传递给println函数,在您的情况下,它是一个字符串加上一个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;
12:invokespecial#26//方法java/lang/StringBuilder。”“:(Ljava/lang/String;)V
15:iload_1
16:invokevirtual#29//方法java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
19:invokevirtual#33//方法java/lang/StringBuilder.toString:()Ljava/lang/String;
如果您对编译器如何处理表达式感兴趣,也会发现此答案很有用:


不知道你在问什么如果你不告诉它,为什么你会认为它会打印出变量的值?如果您告诉我们预期的输出,我们可能会为您提供更多帮助。您期望得到什么?
“result”
result
是不同的东西,第一个是单词result的字符串表示,第二个是变量名。因此,基本上,您解决了如何自己打印变量值的问题,方法是告诉Java打印变量,而不仅仅是常量字符串。