我可以使用串联运算符(+)
或concat()
方法进行字符串连接
String myData = "a"+"b"; // using concatenation operator
String myData = "a".concat("b"); // using concat() of String
但是要使用整数连接字符串,我不能直接使用concat()。所以我必须使用以下任一逻辑
String myData = "a"+5;
String myData = "a".concat(String.valueOf(5));
但是当我想使用连接运算符和concat
时,我在下面的行中发现了一些奇怪的东西String myData = "a"+null; //output = anull
String myData = "a".concat(String.valueOf(5)); // output = NullPointerException
or
String myData = "a".concat(null); // output = NullPointerException
我在脑海中出现了以下问题
1) How concat() method and concatenation operator works what is the difference in their logic of performing any task?
2) Can we really concat a null using (+) if so why concat() method cannot achieve the same
由于
答案 0 :(得分:1)
1)+
运算符(生成String
)总是经过中间StringBuilder
(或StringBuffer
,如果定位旧版平台1.5之前(已发布7(7) ) 几年前))。对于连接两个或者三个String
s concat
,由于缺少中间体,通常会更快。但是,对于更长的连接,+
将获胜,因为中间分配将会更少。
2)null
通常表示错误(很可能是设计错误)。通常,应尽早报告错误,String.concat
会报告错误。但是,+
或StringBuilder
并置通常用于生成调试字符串,因此null
可以容忍并生成适合调试的结果(但不是UI!)。
答案 1 :(得分:0)
语义上没有区别,你的例子就错了。
String myData = "a"+null; //output = anull
String myData = "a".concat(String.valueOf( (Object)null ) ); // output = anull
这将编译和工作。 +
的行为就像为每个操作数调用String.valueOf()
一样。