字符串拼接+和concat的区别

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

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

public static void main(String[] args) {
    // example1
    String str1 = "s1";
    System.out.println(str1 + 100);//s1100
    System.out.println(100 + str1);//100s1
    String str2 = "s2";
    str2 = str2.concat("a").concat("bc");
    System.out.println(str2);//s2abc
    // example2
    String str3 = "s3";
    System.out.println(str3 + null);//s3null
    System.out.println(null + str3);//nulls3
    String str4 = null;
    System.out.println(str4.concat("a"));//NullPointerException
    System.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的原因。


相关文章
|
设计模式 开发框架 监控
精准解读桥接模式-用桥接模式构建可扩展的软件系统
桥接模式是一种设计模式,旨在将抽象和实现部分分离,使它们可以独立地变化。这种模式的目的是提高系统的灵活性和可扩展性。桥接模式的主要思想是将抽象和实现通过一个桥接类连接起来,从而实现它们的解耦。在这种模式中,抽象部分可以根据需要进行扩展,而实现部分可以自由地变化,而不影响彼此。桥接模式在处理多个独立变化的维度、解耦继承关系、处理平台差异和扩展现有系统等方面具有广泛的应用领域。通过使用桥接模式,可以提高系统的可维护性和可扩展性,使系统更加灵活和适应变化。通过桥接模式,将系统中的抽象部分与实现部分解耦,从而...
977 0
精准解读桥接模式-用桥接模式构建可扩展的软件系统
|
Dubbo Ubuntu Java
没有JDK和Maven,用Docker也能构建Maven工程
紧急的时候,借助Docker,在不安装JDK和Maven的环境也能构建Maven工程
2351 0
没有JDK和Maven,用Docker也能构建Maven工程
|
2月前
|
人工智能 机器人 API
从零开始搭建部署 OpenClaw/Moltbot/Clawdbot 完整攻略教程
OpenClaw(原名Moltbot\Clawdbot)是2026年1月突然爆火的开源个人 AI 助手项目,由 Peter Steinberger(PSPDFKit 创始人)开发。OpenClaw 是一个把 本地算力 + 大模型 Agent 自动化 玩到极致的开发者效率工具。OpenClaw 目标是让 AI 不只是给建议,而是直接完成完整工程任务。OpenClaw是一款开源的本地优先AI代理与自动化平台,可整合多渠道通信能力与大语言模型,创建具备持久记忆与主动执行能力的定制化AI助理。本文基于阿里云轻量应用服务器,详细拆解OpenClaw的一键部署、配置及钉钉机器人集成全流程。
903 3
|
移动开发 小程序 JavaScript
Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式
Uniapp 中,能够同时兼容H5、web、app、微信小程序的引入高德地图的语法格式
2003 0
|
人工智能 安全 机器人
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
LangBot 是一个开源的多模态即时聊天机器人平台,支持多种即时通信平台和大语言模型,具备多模态交互、插件扩展和Web管理面板等功能。
2684 14
LangBot:无缝集成到QQ、微信等消息平台的AI聊天机器人平台
|
分布式计算 Java 开发工具
阿里云MaxCompute-XGBoost on Spark 极限梯度提升算法的分布式训练与模型持久化oss的实现与代码浅析
本文介绍了XGBoost在MaxCompute+OSS架构下模型持久化遇到的问题及其解决方案。首先简要介绍了XGBoost的特点和应用场景,随后详细描述了客户在将XGBoost on Spark任务从HDFS迁移到OSS时遇到的异常情况。通过分析异常堆栈和源代码,发现使用的`nativeBooster.saveModel`方法不支持OSS路径,而使用`write.overwrite().save`方法则能成功保存模型。最后提供了完整的Scala代码示例、Maven配置和提交命令,帮助用户顺利迁移模型存储路径。
|
存储 缓存 分布式计算
如何在 PySpark 中缓存数据以提高性能?
【8月更文挑战第13天】
752 8
|
存储 分布式计算 监控
|
机器学习/深度学习 存储 边缘计算
深度学习之稀疏训练
基于深度学习的稀疏训练(Sparse Training)是一种在训练过程中直接构建和优化稀疏模型的技术,旨在减少深度神经网络中的冗余计算和存储需求,提高训练效率和推理速度,同时保持模型性能。
1326 1
|
机器学习/深度学习 PyTorch 算法框架/工具
使用PyTorch实现L1, L2和Elastic Net正则化
本文介绍了机器学习中的正则化技术,包括L1、L2和Elastic Net,用于防止过拟合。L1正则化产生稀疏模型,适合特征选择;L2正则化使参数接近零但不为零,减少过拟合。Elastic Net结合L1和L2优点,适用于特征相关情况。在Python的sklearn库中,可使用Lasso、Ridge和ElasticNet类实现这些正则化。此外,文中提供PyTorch代码示例,展示了如何在多层感知机上应用L1、L2和Elastic Net正则化。
415 0