字符串拼接+和concat的区别

转载自  字符串拼接+和concat的区别


+和concat都可以用来拼接字符串,但在使用上有什么区别呢,先来看看这个例子。

public static void main(String[] args) {// example1String str1 = "s1";System.out.println(str1 + 100);//s1100System.out.println(100 + str1);//100s1

    String str2 = "s2";str2 = str2.concat("a").concat("bc");System.out.println(str2);//s2abc



    // example2String str3 = "s3";System.out.println(str3 + null);//s3nullSystem.out.println(null + str3);//nulls3

    String str4 = null;System.out.println(str4.concat("a"));//NullPointerExceptionSystem.out.println("a".concat(str4));//NullPointerException
}

concat源码:

public String concat(String str) {int otherLen = str.length();if (otherLen == 0) {return this;}int len = value.length;char buf[] = Arrays.copyOf(value, len + otherLen);str.getChars(buf, len);return new String(buf, true);
}

看下生成的字节码:

所以可以得出以下结论:

  • +可以是字符串或者数字及其他基本类型数据,而concat只能接收字符串。

  • +左右可以为null,concat为会空指针。

  • 如果拼接空字符串,concat会稍快,在速度上两者可以忽略不计,如果拼接更多字符串建议用StringBuilder。

  • 从字节码来看+号编译后就是使用了StringBuiler来拼接,所以一行+++的语句就会创建一个StringBuilder,多条+++语句就会创建多个,所以为什么建议用StringBuilder的原因。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinking-in-java(21)并发2

think-in-java 并发前半部分(并发1)参见: https://blog.csdn.net/PacosonSWJTU/article/details/104855730 【21.4.3】中断 1、Thread类包含 interrupt方法,可以终止被阻塞的任务。这个方法将设置线程的中断状态。 如果一个线程…

HDU1176(DP)

Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了&am…

Java趣味分享:try/finally

转载自 Java趣味分享:try/finally考虑以下四个测试方法,它们会输出什么?public class Test {public static void main(String[] args) {System.out.println(test1());System.out.println(test2());System.out.println(test3());System.out.pr…

(转)ThreadPoolExecutor最佳实践--如何选择队列

转自: https://blog.hufeifei.cn/2018/08/12/Java/ThreadPoolExecutor%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5--%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E9%98%9F%E5%88%97/ 前一篇文章《如何选择线程数》讲了如何决定线程池中线程个数,这篇文章讨论“如何…

HDU1576(欧几里得算法)

Problem Descption 要求(A/B)%9973&#xff0c;但由于A很大&#xff0c;我们只给出n(nA%9973)(我们给定的A必能被B整除&#xff0c;且gcd(B,9973) 1)。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。 每组数据有两个数n(0 < n < 9973)和B(1 < B < 10^…

为什么byte取值-128~127??

转载自 为什么byte取值-128~127??java设计byte类型为1个字节&#xff0c;1个字节占8位&#xff0c;即8bit&#xff0c;这是常识。另外&#xff0c;计算机系统中是用补码来存储的&#xff0c;首位为0表示正数&#xff0c;首位为1表示负数&#xff0c;所以有以下结论&#xff1…

(转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别

最近在看并发编程&#xff0c;在使用到ThreadPoolExecutor时&#xff0c;对它的三个关闭方法&#xff08;shutdown()、shutdownNow()、awaitTermination()&#xff09;产生了兴趣&#xff0c;同时又感到迷惑。查了些资料&#xff0c;自己写了测试代码&#xff0c;总算有了个比较…

HDU2049(错列排序)

国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每位新娘打扮得几乎一模一样,并盖上大大的红盖头随机坐成一排; 然后,让各位新郎寻找自己的新娘.每人只准找一个,…

厉害了,Servlet3的异步处理机制

转载自 厉害了&#xff0c;Servlet3的异步处理机制Servlet3发布好几年了&#xff0c;又有多少人知道它的新特性呢&#xff1f;下面简单介绍下。 主要增加了以下特性&#xff1a; 1、异步处理支持 2、可插性支持 3、注解支持&#xff0c;零配置&#xff0c;可不用配置web.xml ..…

(转)Elasticsearch 聚合查询、桶聚合、管道聚合及复合查询

转自&#xff1a; https://blog.csdn.net/zx711166/article/details/81906881 聚合查询 聚合是一种基于查询条件对数据进行分桶、计算的方法。 聚合可以嵌套&#xff0c;由此可以组合复杂的操作&#xff08;Bucketing 聚合可以包含 sub-aggregation&#xff09;。 聚合的三种…

3种常见的Class级别的错误

转载自 3种常见的Class级别的错误ClassNotFoundException 很明显&#xff0c;这个错误是 找不到类异常&#xff0c;即在当前classpath路径下找不到这个类。 ClassNotFoundException继承了Exception&#xff0c;是必须捕获的异常&#xff0c;所以这个异常一般发生在显示加载类的…

(转)es 聚合查询并返回每个组的数据

转自&#xff1a; https://blog.csdn.net/ywdhzxf/article/details/84878760 需求 我现在是有一个这样的需求, 我需要在es里面按照 cityarea 进行分组(group by), 并且每个 cityarea的组 需要展示 按照时间排序的前10条, 状态全部为1的数据 实现 { "query": {…

java程序员被误导的一个概念,Set也可以有序

转载自 java程序员被误导的一个概念&#xff0c;90%人不知道我们经常听说List是有序且重复的&#xff0c;Set是无序不重复的。这里有个误区&#xff0c;这里说的顺序有两个概念&#xff0c;一是按添加的顺序排列&#xff0c;二是按自然顺序a-z排列。Set并不是无序的&#xff0c…

es7 bulk api 批量插入es

post localhost:9200/cuiji/_doc/_bulk {"index":{}} {"RCRD_ID":"RD_TR_001", "CUST_NUM":"CUSTA", "LAST_MODIFY_TIME":"2020-07-18 00:00:50", "NOTE_CONTENT":"催记A001"} {…

TreeSet的null值与元素类型的约束

一、TreeSet Java的TreeSet通过TreeMap来实现&#xff0c;具有自然排序的功能。 在默认情况下&#xff0c;元素不允许为null值&#xff0c;元素必须是相同类型&#xff0c;元素必须实现了Comparable接口&#xff1b;否则会出现java.lang.ClassCastException。 可以通过设置Comp…

转-HTTPClient调用https请求,通过基本认证用户名密码(Basic Auth)

转自&#xff1a; https://blog.csdn.net/qq_27605885/article/details/79131483 本文来源是Apache官网例子&#xff1a;http://hc.apache.org/httpcomponents-client-4.5.x/httpclient/examples/org/apache/http/examples/client/ClientAuthentication.java 之前找过很多博客…

你知道void和Void的区别吗

转载自 你知道void和Void的区别吗 区别 void 用于无返回值的方法定义。 Void Void是void的包装方法&#xff0c;和其他基础类型的包装方法不同是Void不能被实例化&#xff0c;Void还可用于一直返回null的方法或者返回null的泛型。 代码示例

httpclient es action_request_validation_exception validation failed 1 no requests added原因和解决方法

【README】 批量插入数据到es&#xff0c;报错如下&#xff1b; action_request_validation_exception validation failed 1 no requests added 原因&#xff1a; 在请求头设置报文为 json格式&#xff0c;但报文并非json格式&#xff0c; 如 java字符串&#xff1a; post l…

POJ1321(DFS)

Problem Descrption 在一个给定形状的棋盘&#xff08;形状可能是不规则的&#xff09;上面摆放棋子&#xff0c;棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列&#xff0c;请编程求解对于给定形状和大小的棋盘&#xff0c;摆放k个棋子的所有可行的…

关于java流的几个概念:IO、BIO、NIO、AIO,有几个人全知道?

转载自 关于java流的几个概念&#xff1a;IO、BIO、NIO、AIO&#xff0c;有几个人全知道&#xff1f; 关于同步、阻塞的知识我之前的文章有介绍&#xff0c;所以关于流用到这些概念与之前多线程用的概念一样。 下面具体来看看java中的几种流 IO/BIO BIO就是指IO&#xff0c;即…