Java表达式中的双引号是什么意思?
我有。
"2 + 2" + 3 + 4
"hello 34" + 2 * 4
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"
该 +
在Java中,操作数有两种含义。
String
,它的意思是字符串连接。在字符串连接的情况下,一个非字符串的参数首先要变成一个字符串。 这个过程被称为 字符串转换 并具体如下 JLS 5.11.1. 这个过程如下。
toString()
被称为盒装值。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.Float
和 java.lang.Double
.