我是一名新程序员,试图了解这个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
?
这是我在这里的第一个问题,所以请原谅任何失礼!
答案 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
。