Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 为什么添加一个字符串和一个int会这样做?_Java - Fatal编程技术网

Java 为什么添加一个字符串和一个int会这样做?

Java 为什么添加一个字符串和一个int会这样做?,java,Java,当我运行以下代码时: 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 Lian

当我运行以下代码时:

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

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

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

"Case 1" + 12 
。。。与

"Case 1" + "12"
因此,您的结果将是第一个字符串,该字符串后面的字符
12
一直保持打开状态

因此:
案例112

从关于字符串的Java文档中:

“Java语言为字符串提供了特殊支持 连接运算符(+),用于将其他对象转换为 字符串连接是通过StringBuffer实现的 类及其append方法。实现字符串转换 通过方法toString,由Object定义并由所有 有关字符串连接的更多信息 和转换,参见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”,因为括号中的数学具有优先权

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


请参阅:

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

这是java中的默认值。如果执行“string”+“int”,java将首先将整数转换为字符串,然后将字符串与“int”字符串连接起来。 因此,在你的情况下: “case1”与int“12”的字符串值串联,结果是“case112”。“案件223”也是如此。 如果你想让它做加法运算。你应该这样做 System.out.println(“case”+(1+a)); 那么输出将是:
案例13

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

System.out.println(1+1);
System.out.println("Test"+1+1);
它将打印出2。这是因为该整数紧挨着另一个整数

如果您这样做了:

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

它将打印Test2。因为,你先看数字的加法。希望我能帮上忙。

如果使用“+”操作符隐式调用函数,比如“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() 

祝你好运

我认为你需要阅读

你的疑问到底是什么?你期望什么?如果你想执行加法,你可以使用
String.valueOf(1+12)
No,
System.out.println(“Test”+1+1)
会打印
“Test11
。试试看。非常感谢您如此详细的解释!它真的很有帮助!