[英]Difference between single quotes and double quotes in java?
我有
System.out.println(2+" "+3);
System.out.println(2+' '+3);
第一个打印2 3,而第二个打印37可以任何人解释为什么它打印37 ???
ascii中' '= 32
。
a:) System.out.println(2+" "+3); // string concatenation
b:) System.out.println(2+' '+3); // 2+ 32(32 ascii valur for space)+3 so 37
引用附加运算符的 Java语言规范:
如果
+
运算符的任一操作数的类型是String
,则操作是字符串连接。否则,
+
运算符的每个操作数的类型必须是可转换(第5.1.8节)到原始数字类型的类型
对于数字类型 :
对操作数执行二进制数字提升(第5.6.2节)
二进制数字促销 :
[...]否则,两个操作数都转换为
int
类型。
所以, 2 + " "
2+" "+3
是2 + " "
,这是一个字符串连接,而String + 3
也是字符串连接,因此2 + " " + 3
是"2" + " " + "3"
这意味着"2 3"
。
2 + ' '
2+' '+3
是2 + ' '
,空格文字是char
,因此它被转换为int
(32),而2 + 32 + 3
是37
。
如果文字是变量,它实际上就是这样,其中对变量的赋值仅用于说明中间结果的类型:
// 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);
第一个是将所有内容转换为字符串。 第二个是转换为整数。 空格的十进制代码是32.如果你想要2和3是字符串,那么使用引号。
那是因为你正在打印2 2+ ' ' +3
的整数值,它会将' '
作为char
而不是string
转换为简单地将b)部分转换为它的ASCII值,这将导致2 + ASCII value of Space + 3
,最终结果为37,因为space
的ASCII值为32。
第一个例子是执行字符串连接,所以答案非常直观。 第二个例子是不同的,因为''不是一个字符串,它是一个字符。 char被转换为整数代码,这就是你得到这个数字的原因。
像这里的连接几乎是Java容忍的一种情况。 在其他上下文中,char''和String“”显示为true:有很多不同的类型。
除非System.out.println
的输出参数显式为java.lang.String
否则java会自动将它作为输出参数给出的任何数据类型和对象转换为java.lang.String
。
在你的第一个例子中, System.out.println(2+" "+3);
java所做的是扫描输出参数并找到一个int
(2),双引号" "
表示双引号内的字符数组将被解释为String
,另一个int
(3)。 Java将String " "
视为提示,参数中的其他所有内容也应被视为字符串。 那么有效的是System.out.println(2+" "+3);
被视为你已经写好了
System.out.println(Integer.toString(2)+" "+Integer.toString(3));
在你的第二个例子中, System.out.println(2+' '+3);
相同的过程发生,但java找到' '
- 由单引号包围的空格,告诉java它正在使用原始数据类型char
- 这就是为什么java将此作为一个附加处理的原因操作: 所有java原始数据类型都是数字 - 所以java接受该提示并将输出参数解释为int
(2),加法运算符(+), char
(空格字符) - 与unsigned short
,加法运算符(+)和另一个int
(3)。 空白字符的数字值为32,因此幕后转换会像您编写的那样处理您的语句
System.out.println(Integer.toString(2+32+3));
当然,幕后进行的解析比我在这里描述的要复杂得多。 你为什么不试试:
System.out.println("The answer is "+(3+" "+2));
System.out.println("The answer is "+(3+2));
System.out.println("The answer is "+(3+' '+2));
甚至
System.out.println('a' + 'b' + 'c');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.