在java中使用eclipse IDE时,
当我编写第一个代码时,我会得到以下输出(而它应该是其他的)。现在只要稍作改变,结果就不同了。为什么呢 案例1在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
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打印变量,而不仅仅是常量字符串。