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

问题描述 投票:-3回答:1

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

我有。

"2 + 2" + 3 + 4

"hello 34" + 2 * 4

1 + ""

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

java expression quotes
1个回答
1
投票

里面的任何东西 " " 将成为 Stringstring + 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"

0
投票

+ 在Java中,操作数有两种含义。

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

在字符串连接的情况下,一个非字符串的参数首先要变成一个字符串。 这个过程被称为 字符串转换 并具体如下 JLS 5.11.1. 这个过程如下。

  • 一个基元类型被转换为字符串 仿佛 它是盒装的,而 toString() 被称为盒装值。
  • A null 被转换为字符串 "null".
  • 任何其他引用类型都是通过调用其 toString().

完整的语义 + 中指定了连词。JLS 15.8.1.


@宝宝的回答 解释了问题中第一个例子的工作原理,第二个例子也是如此。 (注意 * 优先于 + 所以 2 * 4 被评价为乘法和 8 然后在连接中使用)。)

第三个例子是一个常见的Java习语,用于将一个数字转换为一个 String. 因此

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

从表面上看,评论中的版本 应是 更有效率。 并列与 ""出现 来执行一个不必要的连接。 然而,如果你仔细阅读规范的措辞,很明显,Java编译器是以 允许 来优化第一种形式到第二种形式。 据我了解,他们在最近的Java版本中做了......。

许多人认为 ... + "" 成语,以陋就简。 然而它很常见,所以当你遇到它时,你需要识别它。


1 - 在此上下文中,这意味着任何积分或浮点基元类型,或任何匹配的封装类型。 完整的集合是 byte, short, char, int, long, float, double, java.lang.Byte, java.lang.Short, java.lang.Character, java.lang.Integer, java.lang.Long, java.lang.Floatjava.lang.Double.

© www.soinside.com 2019 - 2024. All rights reserved.