要获得newString
“”的值99 bottles
:
int x = 99;
String fruit = " bottles";
要形成一个新的字符串,我这样做:
String newString = "" + x + fruit;
因为这是不允许的:
String newString = x + fruit;
但是在这里使用双引号似乎有些不对劲。
有没有更好的方法来做到这一点(不使用"" + x
)?
需要明确的是,以下是完全合法的 Java:
String fruit = " bananas";
int x = 99;
String newString = x + fruit; // "99 bananas"
如果左操作数或右操作数表达式的类型是;则二元+
运算符是字符串连接。见JLS 15.18。String
在这种情况下,以下是等效的:
String newString = "" + x + fruit;
首字母""
是一个常见的习惯用法,它使读者清楚地知道涉及字符串连接。(但我个人不会使用它,因为它对我来说看起来很笨重。IMO,这就像添加多余的括号来帮助不了解运算符 Java 优先规则的程序员。Icck。)
在上面的示例中,""
没有语义差异。但是,在某些情况下,前导""
会改变表达的含义。例如:
int x = 1;
String fruit = " bananas";
String newString = x + x + fruit; // "2 bananas"
String newString2 = "" + x + x + fruit; // "11 bananas".
(请注意,javac
JLS 允许编译器积极优化字符串连接序列,因此明显的连接""
将被优化掉。)
一种替代方法是String#format()
函数。按如下方式使用它:
final String newString = String.format("%d bottles", x);
另一种选择是Integer#toString()
:
final String newString = Integer.toString(x) + " bottles";
使用 Integer.toString():
int x = 99;
String fruit = " bottles";
String newString = Integer.toString(x) + fruit;
还有一个 Float.toString(float val)、Double.toString(double val) 和 Long.toString(long val)。就个人而言,我不喜欢在进行连接时使用“”。我认为这是草率的,因为没有更好的词。
我试过了:
int x = 99;
String fruit = " bottles";
String newString = x + fruit;
System.out.println(newString);
在 Eclipse 上,它确实有效......但如果上述方法对您不起作用,则 String 有一个 valueOf() 方法:
String newString = String.valueOf(x) + fruit;
然而,正如动静能量所说,“”实际上更常见。
String newString = x + fruit;
在 Java 中是允许的。
另一种方法是:
String newString = String.format("%d bottles", x);
用途
String newString = "" + x + fruit;
很常见,人们知道你在做什么。在某些语言中,你可以做
$str = 3 . 'foo'; # in PHP
在某些语言中,你可以做
str = "#{x} foo" # in Ruby
两者看起来更自然。