Java 中的字符串

目录

Java 中的字符串

字符串的创建

在 Java 中,可以通过以下几种方式创建字符串:

1.使用字符串字面量:

复制代码
String str = "Hello, World!";

2.使用 new 关键字和构造函数:

复制代码
String str = new String("Hello, World!");

3.使用 StringBuilderStringBuffer 类的 toString() 方法:

复制代码
StringBuilder sb = new StringBuilder("Hello, World!");
String str = sb.toString();

字符串的比较

在 Java 中,比较字符串时需要注意以下几点:

  1. 使用 == 运算符比较字符串时,比较的是字符串的引用,而不是字符串的值。

    复制代码
    public class Client {
        public static void main(String[] args) {
            String a = "123"; //创建字符串
            String b = "123";
            System.out.println(a == b);
        }
    }

    原因:相同字符串的地址共用

    图解:

    new关键字是在堆内存中开辟内存空间

    == 对基本数据类型来说进行的是值的判断,对引用数据类型来说比较的是地址是否相等

    复制代码
    public class Client {
        public static void main(String[] args) {
            String a = "123"; //创建字符串
            String b = "123";
            String c = new String(original: "123"); //new关键字是在堆内存中开辟内存空间
            System.out.println(a == b);
            System.out.println(a == c);
            System.out.println(b == c);
            //== 对基本数据类型来说进行的是值的判断,对引用数据类型来说比较的是地址是否相等
        }
    }

    对基本数据类型来说 进行的是值的判断,基本数据类型只能用判断,没有equals()这个方法

    对引用数据类型来说 ==比较的是地址是否相等,equals()方法首先比较的是地址是否相等,如果相等返回true,如果不相等,比较的是值是否相等

  2. 使用 equals() 方法比较字符串时,比较的是字符串的值。

  3. 如果需要比较字符串的大小,可以使用 compareTo() 方法。

字符串的拼接

在 Java 中,可以使用 + 运算符或 concat() 方法来拼接字符串。

1.使用 + 运算符:

+这里会调用append()方法进行拼接,利用toString()方法生成new,toString()方法里有new关键字;new关键字是在堆内存中开辟内存空间

复制代码
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + ", " + str2 + "!";

public static void main(String[] args) {
    //字符串的拼接
    String s1 = "123";
    String s2 = "456";
    String s3 = s1 + s2;
    String s4 = "123456";
    System.out.println(s3 == s4);
}

原因:s3这里:调用了append()方法,进行了字符串拼接,形成了123456

执行顺序:

复制代码
@Override
public synchronized String toString() {
    if (toStringCache == null) {
        toStringCache = Arrays.copyOfRange(value, from: 0, count);
    }
    return new String(toStringCache, share: true);
}

并且这里返回的是new,new关键字是在堆内存中开辟内存空间,

所以是flase

例题1:

例题2:

复制代码
String s1 = "123" + "456"; //编译是编译成123456
String s2 = "123456"; //编译是编译成123456
System.out.println(s1);
System.out.println(s1 == s2); //所以是true

图解:

2.使用 concat() 方法:

复制代码
String str1 = "Hello";
String str2 = "World";
String str3 = str1.concat(", " + str2 + "!");

如何定义一个空的字符串

字符串定义空的两种方法:

复制代码
String 张三=" ";//在栈,堆内存中有指向,但是没有数据

String 李四=null;//没有指向(指向是空)

String 王五;//不能使用,必须要初始化
相关推荐
IKUN家族6 小时前
Spring MVC(一)
java·spring·mvc
老马识途2.08 小时前
关于跨域问题的总结
java·前端
魔力女仆8 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
都叫我大帅哥8 小时前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng9 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2401_894915539 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
2501_936415699 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
麻瓜老宋9 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
极客先躯10 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq11 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记