【问题标题】:What do double quotes in a Java expression mean?Java 表达式中的双引号是什么意思?
【发布时间】:2013-12-21 19:59:54
【问题描述】:

Java 表达式中的双引号是什么意思?

我有:

"2 + 2" + 3 + 4

"hello 34" + 2 * 4

1 + ""

谁能解释一下这些表达式是如何计算的,最后一个的目的是什么?

【问题讨论】:

  • 我投票重新打开这个问题是因为 1)这是(IMO)一个有用且合法的问题(编辑后),2)它被用作 dup 目标,3)还有更多有用可以回答的事情。

标签: java expression quotes


【解决方案1】:

" " 中的任何内容都将变为 String。和string + Int = String 。例如,

"2 + 2" + 3 + 4

你会得到2 + 234

在你的问题中,

"2 + 2" + 3 + 4 +"hello 34" + 2 * 4 //i added '+' between '4' and 'hello' since there is an error in expression

将像这样评估:

1. output = "2 + 2" + 3 + 4 +"hello 34" + 2 * 4
2. output = "2 + 2" + 3 + 4 +"hello 34" + 8 //operation '*' evaluated first
3. output = "2 + 23" + 4 +"hello 34" + 8
4. output = "2 + 234" +"hello 34" + 8
5. output = "2 + 234hello 34" + 8
6. output = "2 + 234hello 348"

【讨论】:

  • 啊,所以双引号把它变成了一个字符串,使得 + 运算符进行连接而不是算术。感谢您的澄清。如果您不介意,请提出后续问题,例如我更改为运算符,例如:“2 + 2”+ 3 * 4,是否必须进行任何算术运算?
  • "2 + 2" + 3 * 4 将给你 2 + 212,因为操作 * 首先评估
  • 感谢您的帮助。我很紧张在这个网站上提问,因为它看起来有多么敌对。不过谢谢,非常感谢!
【解决方案2】:

+ 运算符在 Java 中有两种含义。

  • 当两个操作数都是数字时1,表示算术加法。
  • 当任一操作数的类型为String 时,表示字符串连接。

在字符串连接的情况下,非字符串参数首先是字符串。该过程称为字符串转换,在JLS 5.11.1 中指定。程序如下:

  • 原始类型被转换为字符串就好像它被装箱了,并且在装箱的值上调用了toString()
  • null 被转换为字符串"null"
  • 任何其他引用类型都通过调用其toString() 进行转换。

+ 连接的完整语义在JLS 15.8.1 中指定。


@Baby's answer 解释了问题中第一个示例的工作原理,第二个示例类似。 (请注意,* 的优先级高于+,因此2 * 4 被评估为乘法,然后8 用于串联。)

第三个示例是将数字转换为String 的常见Java 习惯用法。因此

  1 + "" -> "1"        // equivalent to Integer.toString(1)
  1.0 + "" -> "1.0"    // equivalent to Double.toString(1.0)

从表面上看,cmets 中的版本应该更有效率。与"" 连接似乎会执行不必​​要的连接。但是,如果您仔细阅读规范的措辞,很明显,Java 编译器允许将第一种形式优化为第二种形式。据我了解,它们在最近的 Java 版本中是这样的。

许多人认为... + "" 成语是不好的做法。但是,它很常见,您需要在遇到它时识别它。


1 - 在这种情况下,这意味着任何整数或浮点基本类型,或任何匹配的包装器类型。全套为byte,short,char,int,long,float,double,java.lang.Byte,java.lang.Short,@9876545349@,@988 @、java.lang.Floatjava.lang.Double

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多