连接运算符和concat()如何执行任何任务

时间:2011-07-14 14:18:53

标签: java

我可以使用串联运算符(+)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

由于

2 个答案:

答案 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()一样。