2015-09-25 22 views
1

为什么表达式x + x在它出现的两个地方不打印相同的结果?为什么表达式x + x在它出现的两个地方不打印相同的结果?

String s = args[0]; 
    System.out.println("Hello "+s); 

    int x = 40; 
    System.out.println(x); 
    System.out.println(x+x); 
    System.out.println(s+" "+x+x); 

这段代码的结果是,当我在cmd中执行java EG1 kaan

Hello kaan 
40 
80 
kaan4040 

为什么打印的最后结果显示kaan4040而不是kaan80

+1

后两位的是算术运算和是一个字符串连接? – vikingsteve

+4

因为一个是加法,另一个是字符串连接 – JonK

回答

2

在上一次打印语句中,您正在执行字符串连接而不是算术加法。

更改System.out.println(s+" "+x+x)System.out.println(s+" "+(x+x))。因为它需要打印的代码添加值,然后字符串连接

+0

添加一点点解释...操作的结果取决于参数。例如,一个String +其他的东西将是一个字符串连接,而一个double +另一个double将是一个double。所以你首先得到一个s +“”,这是一个String。然后你将s添加到该String中,这将再次成为一个String。然后再次添加s,进一步增加字符串 –

2

进行更改System.out.println(s+" "+x+x); to System.out.println(s+" "+(x+x));

在此行中,“开始打印”的整数,因此增加另一个整数它会再次产生整数,然后将其转换成字符串并打印出来:

System.out.println(x + x); // integer + integer 

然而在这条线你“开始打印“的字符串,那么所有其他值添加到它是在第一次转换成字符串,然后连接到一起:

System.out.println(s + " " + x + x); // String + String + integer + integer 

如果你想两个整数加在一起之前拼接完成后,你需要把括号附近给它一个更高的公关iority:

System.out.println(s + " " + (x + x)); // String + String + integer 
+0

谢谢,这真的有助于 – user3135672

0

或更改System.out.println(x +x+" " +s);

+0

可能打印80kean或4040kean :) – triForce420

+0

请解释上述代码是如何工作的。 – Phani

+0

如果第一个表达式是字符串,则编译器在+符号之后将下一个表达式看作字符串。和+符号作为连接。 – Vaseph

0

你是因为自动转换为字符串进行串联,而不是另外

6

1

因为java在你的代码中做了一些工作。当你做System.out.println(x+x);时,它看到x+x是一个带有两个整数的表达式并对它进行评估(它是80)。当您执行""+x+x时,它看到3 String,因此将此表达式评估为String级联。

(顺便说一句,通过它,我的意思是javac和“看见”,我的意思是,还有“阅读”)

0

当你添加任何字符串,则会导致只字符串。您已将x+x附加到" "之后,名称后面会附加40。您可以使用System.out.println(s+" "+(x+x))

0

在最后一个print语句:

System.out.println(s+" "+x+x); 

s是一个字符串,是连接在一起“”,从左至右用S和串联形成的表达“”,然后用X,然后再连接(s +“”+ x)与x连接,产生kaan4040。

如果+运算与用于:

  • 2个弦乐,级联发生
  • 1字符串和1个INT,级联发生
  • 2整数,算术加法

考虑以下情况:

System.out.println(x + x + " " + "hello"); 

在这个例子中,当x和x之间发生算术加法运算时,80Kaan被打印,然后结果值(80)与空格和hello连接。


从左到右阅读。


0
int x = 40; 
System.out.println(x); 
System.out.println(x + x); 
System.out.println("" + x + x); 

40 
80 
4040 

为int 40

为int 40 + INT 40(数学)

是字符串40的concat字符串40(因为添加 “”字符串)

0
String s = args[0]; 
    System.out.println("Hello "+s); 

    int x = 40; 
    System.out.println(x); //1st statement 
    System.out.println(x+x); //2nd statement 
    System.out.println(s+" "+x+x); //3rd statement 

第一条语句简单地将x转换为字符串

第二个satatement添加了数字,因为没有字符串,编译器认为加号是两个数字的加法。

第三人看到,有一个字符串,所以编译器认为这样的:

打印S的值,增加空间(”“),添加X(x转换成字符串)的值,添加x的值(将x转换为字符串)。

因此,Kaan4040。

如果要打印80张,你可以做到这一点有两种方式:

int sum = x+x; 
System.out.println(s+" "+sum); //more readable code 

System.out.println(s+" "+ (x+x)); //may confuse you 

编译器会想到X + X为整数,因为它没有找到括号内的任何字符串。我更喜欢第一个。 :)

0

为什么是打印显示kaan4040而不是kaan80的最后结果?

这是因为这是字符串在与+符号一起使用时的行为方式。当在println方法中使用时可能意味着不同。

  • 这意味着字符串串联当你与一个字符串
    • 使用它的5,即使是一个整数将被隐式转换为字符串。

例如:

System.out.println("Hello" + 5); //Output: Hello5 

  • 它成为数学运算:一对托架的内使用时,因为支架将被首先操作(添加第一),然后转换为字符串。
    • 第一+级联,和第二+添加参考代码下面)。

E.g:

System.out.println("Hello" + (5+7)); //Output: Hello12 
0

如果 '+' 操作数的任何一个是字符串,那么Java内部创建 'StringBuilder的' 和那些操作数追加到建设者。例如:

String s = "a" + 3 + "c"; 

它就像

String s = new StringBuilder("a").append(3).append("c").toString(); //java internally do this 
相关问题