gpt4 book ai didi

java - java中单引号和双引号的区别?

转载 作者:搜寻专家 更新时间:2023-11-01 01:50:56 24 4
gpt4 key购买 nike

我有

  1. System.out.println(2+""+3);

  2. System.out.println(2+' '+3);

第一个打印 2 3 而第二个打印 37 任何人都可以解释为什么它打印 37 吗???

最佳答案

Additive Operators 引用 Java 语言规范:

If the type of either operand of a + operator is String, then the operation is string concatenation.

Otherwise, the type of each of the operands of the + operator must be a type that is convertible (§5.1.8) to a primitive numeric type

For Numeric Types :

Binary numeric promotion is performed on the operands (§5.6.2)

Binary Numeric Promotion :

[...] Otherwise, both operands are converted to type int.

所以,2+""+3就是2 + "",是一个字符串拼接,String + 3也是字符串连接,因此 2 + ""+ 3"2"+ ""+ "3",这意味着 "2 3"

2+' '+32 + ' ',空格字面量为char,所以转为int (32),2 + 32 + 337


如果字面量是变量,实际上会是这样,赋值给变量只是为了说明中间结果的类型:

// String concatenation
String s = new StringBuilder().append(2).append(" ").append(3).toString();
System.out.println(s);

// Numeric addition
int n = 2 + (int)' ' + 3;
System.out.println(n);

append()println() 都重载了,所以它们不是同一个方法。

因为它们是字面值,而不是变量,编译器会在编译时完成,你真的明白了(尝试反汇编 .class 文件自己看看):

System.out.println("2 3");
System.out.println(37);

关于java - java中单引号和双引号的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32410628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com