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 王五;//不能使用,必须要初始化
相关推荐
你怎么知道我是队长5 小时前
C语言---枚举变量
c语言·开发语言
李慕婉学姐5 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
吃茄子的猫5 小时前
quecpython中&的具体含义和使用场景
开发语言·python
云栖梦泽5 小时前
易语言中小微企业Windows桌面端IoT监控与控制
开发语言
数据大魔方5 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
奋进的芋圆7 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin7 小时前
设计模式之桥接模式
java·设计模式·桥接模式
Edward.W7 小时前
Python uv:新一代Python包管理工具,彻底改变开发体验
开发语言·python·uv
小熊officer7 小时前
Python字符串
开发语言·数据库·python
model20057 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端