繁体   English   中英

字符串如何接受整数?

[英]How can a string accept an integer?

变量String也可以接受整数值。 或者我们可以用字符串连接整数?

例:

public class TestString1 {
        public static void main(String[] args) {
        String str = "420";
        str += 42;
        System.out.print(str);
    }
}

我期待编译错误,因为String正在与一个整数连接。

字符串连接运算符( + )上的JLS文档 -

15.18.1字符串连接运算符+

如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换以在运行时生成字符串。 结果是对String对象的引用(新创建,除非表达式是编译时常量表达式(第15.28节)),它是两个操作数字符串的串联。 左侧操作数的字符位于新创建的字符串中右侧操作数的字符之前。 如果String类型的操作数为null,则使用字符串“null”而不是该操作数

这就是String + int不会产生任何错误的原因。 它打印42042

其他答案都没有解释这里实际执行的内容。

您的代码将转换为以下内容:

String str = "420";

// str += 42;
StringBuilder sb = new StringBuilder(str);
sb.append(42);  // which internally does something similar to String.valueOf()
str = sb.toString();

System.out.print(str);

int添加到String会将int附加到字符串,从而将int转换为字符串。

双引号中给出的任何内容都是String, +用于将字符串与任意值(int值)连接。
因此整数值将附加到字符串。 这里

String str = "420";
     str += 42; // 42 will be appended to 420 and result will be 42042

x = 20 y = 10

我在下面从高到低显示优先顺序:

B - 支架O - 功率DM - 分频和乘法AS - 加法和减法

如果运算符具有相同的优先级,则从左到右工作

现在

System.out.println(“printing:”+ x + y);

“打印:”:是一个字符串“

“+”:是Java中唯一一个将Number连接到String的重载运算符。 由于我们在这里有2个“+”运算符,并且x + y在“打印:”+之后已经发生了,因此它将x和y视为字符串。

所以产量是2010年。

System.out.println(“printing:”+ x * y);

在这里

“*”:优先级高于+

所以它的x * y首先打印:+

所以输出是200

如果你想在第一种情况下输出200作为这样做:

System.out.println(“printing:”+(x + y));

Bracket的优先顺序高于Addition。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM