-1

当我运行以下代码时:

public class LianXi1 
{ 
   public static void main(String args[]) 
   { 
     int a=12; 
     int b=23; 
     System.out.println("case 1"+a); //

     System.out.println("case 2"+b); //

   } 
} 

我得到这个结果:

@ubuntu:~/mycode/test$ java LianXi1 
case 112
case 223

但我不明白结果,谁能帮忙?

4

7 回答 7

14

当你将一个字符串和一个整数相加时,它会执行“字符串连接”,它将你的整数转换为一个字符串并将其粘贴在另一个字符串的末尾。

"Case 1" + 12 

... 是相同的

"Case 1" + "12"

因此,您的结果将是第一个带有字符的字符串12

因此: Case 112

来自关于字符串的 Java 文档:

“Java 语言为字符串连接运算符 (+) 以及其他对象到字符串的转换提供了特殊支持。字符串连接是通过 StringBuffer 类及其 append 方法实现的。字符串转换是通过 Object 定义的 toString 方法实现的并由 Java 中的所有类继承。有关字符串连接和转换的更多信息,请参阅 Gosling、Joy 和 Steele,Java 语言规范。

但小心点!从左到右添加作品,那么接下来会打印什么?

System.out.println(1 + 2 + "test" + 3 + 4);

首先,它确实1 + 2,它等于3

然后它会3(最后一步的结果)+ "test",这会导致"3test"

接下来,它会执行"3test" + 3,这会导致"3test3"

最后,"3test3 + 4"3test34

如您所见,在事物周围加上括号以确保它们按您想要的顺序出现是个好主意。

(1 + 2) + "test" + (3 + 4)将是“3test7”,因为括号中的数学具有优先权。

于 2012-07-25T14:11:09.060 回答
2

当在字符串和 int 或字符串与任何其他原始数据类型(如 float、long、short 等)之间执行连接操作时,原始数据始终转换为要附加到原始字符串上的字符串。您的输出显示字符串加上变量 a 和 b 的字符串表示形式。

见:http ://www.java-samples.com/showtutorial.php?tutorialid=217

于 2012-07-25T14:14:06.813 回答
1

如果您使用“+”运算符隐含函数调用,例如“toString()”

改变你的类型 int => Integer 然后试试这个。

public class Main { 
   public static void main(String args[]) { 
     Integer a=12; 
     Integer b=23;

     System.out.println("case 1" + a.toString()); //
     System.out.println("case 2" + b.toString()); //
   } 
} 

因为

"case 1" + a => "case 1" + a.toString(); => "case 1" + "12";

和其他类型一样

 this + a => this.toString() + a.toString() 

祝你好运!

于 2012-07-25T14:18:35.670 回答
0

“添加”一个 String 和一个 int 是什么意思?在 Java 中,您必须在运算符的两侧具有相同的类型才能执行所需的操作。在许多不匹配的情况下,Java 会将一个值转换为与另一个相同的类型。在这种情况下,int 被转换为 String,因为通常很难将 String 转换为 int。现在 + 运算符在第一个 println() 调用中“连接”两个字符串“case 1”和“12”。“连接”只是意味着将两个字符串连接成一个字符串,在这种情况下创建字符串“case112”,您会看到输出。

于 2012-07-25T14:14:58.577 回答
0

它在java中是默认的。如果你做“string”+“int”,java会首先将整数转换为字符串,然后将字符串和“int”字符串连接起来。所以在你的情况下:“Case 1”与int“12”的字符串值连接,结果是“Case 112”。同样是“案例223”。如果你想让它做加法操作。你应该这样做 System.out.println("case " + (1+a) ); 那么输出将是:案例 13

于 2012-07-25T14:16:50.650 回答
0

我认为您需要阅读The Java Language Specification#15.18.1 String Concatenation Operator +

于 2012-07-25T14:21:25.827 回答
-2

当你打印一个整数时,除了一个字符串,它就像一个字符串。但是,如果您这样做了:

System.out.println(1+1);

它会打印出 2。这是因为整数紧挨着另一个。

如果你这样做了:

System.out.println("Test"+1+1);

它会打印Test2。因为,您首先查看数字的加法。希望我有所帮助。

于 2012-07-25T14:17:21.713 回答