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 王五;//不能使用,必须要初始化
相关推荐
下载居2 小时前
Node.js(Javascript运行环境) 26.1
开发语言·javascript·node.js
范什么特西2 小时前
第一个Mybatis
java·开发语言·mybatis
下次再写2 小时前
【Redis实战】深入理解Redis缓存策略:从原理到Spring Boot实践
java·spring boot·redis·缓存穿透·缓存击穿·分布式缓存·缓存策略
超梦dasgg2 小时前
智慧充电系统计费定价服务Java 实现
java·开发语言·spring·微服务
敲敲千反田2 小时前
ThreadLocal和CompletableFuture
java·网络·jvm
码云数智-园园2 小时前
Spring循环依赖:三级缓存到底解决了什么,没解决什么?
java·后端·spring
vx-程序开发2 小时前
PHP书店网站-计算机毕业设计源码05274
开发语言·php·课程设计
陈eaten2 小时前
windows上协调多版本python以及虚拟环境
开发语言·windows·python·pycharm·pip·虚拟环境·py
龙亘川2 小时前
城市更新×智慧治理:老旧小区改造中的数字化创新实践
java·大数据·人工智能·机器学习·智慧城市
无所事事O_o2 小时前
OPENSSL生成非对称加密公私钥
java·加密