2012-06-13 48 views

回答

11

使用括号如下

System.out.println((i+1) + " " + (j+1)); 

docs

+运算在语法上是左结合,不管它是否 由类型的分析后确定为表示字符串连接 或加成。在某些情况下,需要注意获得理想的结果。 例如,表达式:

A + B + C始终被看作含义:(A + B)+ C

扩展这对你的场景

i+1 + " " + j+1 

变得

(((i + 1) + " ") + j)+1 

由于i是一个int因此(i + 1) = 1,简单的另外

" "String因此((i + 1) + " ") = 1使用Space(字符串级联

类似地,当j和最后1加入,其被添加到String因此String级联取地方,这证明你得到的输出。

+0

非常感谢..不知道.. – sachinjain024

+3

他是要求区别 –

+0

不客气,另请参阅我添加的链接在答案 –

2
int i = 0; 
    int k = Integer.parseInt("12"); 
    int j = k; 
    System.out.println(i+1 + " " + (j+1)); 

基本上当你把+ “” +后,这个Java只是追加值的字符串。

当你把(j + 1)放在方括号中时,它的优先级会变高,并且它首先执行并执行求和运算。

6

那就是" "

每当一个字符串到来时,java并没有做任何计算后,只是将其附加为字符串。

所以在你的情况下,i+1计算为1,但" " + j+1有字符串在其中。因此,它只是附加在一起形成121

+0

但为什么它不附加在第一个案件?如果这是真的应该像01 121 – AurA

+0

任何原语/第一串的出现之前的包装被计算,之后的东西,只是附加在一起。 – Kshitij

+1

@AurA:因为它基本上转化为东西等同于:'”” .concat(J).concat(1)'(或使用StringBuilders,这取决于你的代码和JVM版本类似的版本)。它不能猜测你想要什么,所以这是很自然的从左到右的解释。 – haylem

3

您看到此行为的原因是+运算符的顺序从左到右进行计算。从而如果括号被评价:

System.out.println((((i + 1) + " ") + j) + 1); 

的第一操作员将两个int值并产生int值。接下来的+int添加到String并产生String。之后,一切都是字符串连接。你可以引入你自己的圆括号来得到你想要的结果。

+0

+1。最佳答案。 –

+0

是的+1,这的确是最好的答案 – mprabhat

2

当您使用" "之后的表达式被评估为字符串。

使用括号()围绕一个表达式可以解决手头的问题。

System.out.println(i+1 + " " + (j+1)); 
1

+运算符重载加法和字符串连接你在做什么是字符串连接,而不是加法。对于执行除了使用括号。

1

parseint基本上会返回int(查看Java API),并且在Java中只有一个int类型。在这个例子中你使用了“”,其中java将它视为字符串。在任何操作中,确保你不要混淆字符串与计算。始终使用括号将字符串从计算中分离出来。

1

这是因为在+运营商已经离开关联,并与琴弦的重载函数,所以当你有这样的

int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

首先款项 i + 1这使得1,那么它总结1 + " ",它使用它的重载函数连接1和“”,所以它给出了一个值为“1”的字符串。之后,它总结了"1 " + j,并且由于其中一个操作数是一个字符串,它会执行相同的操作,依此类推。

0

Interger.parseInt(String str)是一个包装类方法,用于将String obj类型转换为基本数据类型(int)。这通常用于收集框架工作,用于将原始数据类型转换为对象,反之亦然