为什么我可以将int数据类型中的十进制数添加到没有数据类型转换的字符串

时间:2017-10-29 15:46:55

标签: java types type-conversion

我是一名新程序员,试图了解这个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

这是我在这里的第一个问题,所以请原谅任何失礼!

2 个答案:

答案 0 :(得分:1)

执行了隐式转换。这恰好是+中如何定义- (IBAction)likeButtonPressed:(id)sender { CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView]; NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition]; //do something } 运算符的特殊情况:

  

15.18.1。字符串连接运算符+

     

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

     

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

     

String对象是新创建的(第12.5节),除非表达式是常量表达式(第15.28节)。

当然,Java编译器/运行时可以以最终结果相同的任何方式对其进行优化(例如,使用StringBuilders进行多个连接,或者在同一步骤中转换+连接以避免创建短暂的String实例)< / p>

答案 1 :(得分:1)

由于int 始终总是表示为String并且您正在String与{+串联1}}运算符,编译器会隐式地为你强制转换它,因此不需要显式转换。

因此代码:

binaryNumber = decimalNumber % 2 + binaryNumber;

首先评估decimalNumber % 2,然后编译器会在将结果与String连接之前将结果转换为binaryNumber