Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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_Types_Type Conversion - Fatal编程技术网

Java 为什么我可以在不进行数据类型转换的情况下将int数据类型中的十进制数添加到字符串中

Java 为什么我可以在不进行数据类型转换的情况下将int数据类型中的十进制数添加到字符串中,java,types,type-conversion,Java,Types,Type Conversion,我是一个新的程序员,试图理解这段Java代码的工作原理。我不在上课,这不是家庭作业 该练习要求用户输入十进制数,并让程序将该数字转换为十进制数。下面是教科书中一个稍有不同的程序示例,这是我编写的代码。这很有效,但我不明白为什么 while (decimalNumber != 0) { binaryNumber = decimalNumber % 2 + binaryNumber; decimalNumber = decimalNumber / 2; } Syste

我是一个新的程序员,试图理解这段Java代码的工作原理。我不在上课,这不是家庭作业

该练习要求用户输入十进制数,并让程序将该数字转换为十进制数。下面是教科书中一个稍有不同的程序示例,这是我编写的代码。这很有效,但我不明白为什么

while (decimalNumber != 0) {

     binaryNumber = decimalNumber % 2 + binaryNumber;
     decimalNumber = decimalNumber / 2;

  }
  System.out.println("The decimal number " + decimalNumber +
     " in binary is: " + binaryNumber);
变量
binaryNumber
的类型为
String
,变量
decimalNumber
的类型为
int
。为什么我可以将
int
添加到
String
而不进行某种显式/形式转换


这是我在这里的第一个问题,请原谅任何失礼行为

执行了隐式转换。这恰好是如何在中定义
+
运算符的特殊情况:

15.18.1。字符串连接运算符+

如果只有一个操作数表达式为String类型,则在运行时对另一个操作数执行字符串转换(§5.1.11),以生成字符串

字符串串联的结果是对字符串对象的引用,该对象是两个操作数字符串的串联。在新创建的字符串中,左操作数的字符位于右操作数的字符之前

字符串对象是新创建的(§12.5),除非表达式是常量表达式(§15.28)


当然,Java编译器/运行时可能会以任何方式对此进行优化,以使最终结果相同(例如,使用StringBuilder进行多个串联,或在同一步骤中转换+串联以避免创建短期字符串实例)

由于
int
始终可以表示为
字符串
,并且您正在使用
+
运算符执行
字符串
串联,因此编译器会隐式为您强制转换,因此不需要显式强制转换

因此,守则:

binaryNumber = decimalNumber % 2 + binaryNumber;

首先计算
小数%2
,然后编译器将结果转换为
字符串
,然后再将其与
二进制数

连接起来,这实际上并没有扩大,因为
字符串s=3
不是有效的赋值。这仅在使用连接运算符时发生,并且在语言规范中有一个特殊情况。仍然需要指出的是,这是连接的结果。声明它是在连接之前强制转换的,并不表示强制转换(或者更确切地说,转换)是连接运算符的非字符串操作数的结果。@Hexafrance当然,希望编辑能让它更清楚。非常感谢!我没有意识到转换是隐含的。我在上一个练习中花费了太多时间,错误涉及不匹配的类型,我担心在同一行代码中放置两个不同的数据类型而不进行匹配。