Java之初识String类

String类

在java中通过String类创建和操作字符串。

创建字符串

public class Test1 {
    public static void main(String[] args) {
        //创建字符串
        String str = "Hello";
        String str1 = new String("hello");
        char[] array = {'h','i'};
        String str2 = new String(array);
        System.out.println(str);
    }
}

String类是引用类型。例如 String str = “Hello”;的代码布局如下:
在这里插入图片描述

因为String类是引用类型,故以下代码布局如图所示:

String str1 = "Hello";
String str2 = str1;

在这里插入图片描述
再对str1的值进行修改,str2的值不会发生变化。

String str1 = "Hello";
String str2 = str1;
str1 = "hi";
System.out.println("str = " + str);
System.out.println("str1 = " + str1);

输出结果:
在这里插入图片描述内存布局如图:
在这里插入图片描述

字符串比较

  1. 两个整型变量在判断大小时使用 == 即可完成,但是String类型变量在比较时使用 == 不可以比较字符串是否相等。
public class Test1 {
    public static void main(String[] args) {
        //字符串比较
        String str1 = "Aleng";
        String str2 = new String("Aleng");
        System.out.println(str1==str2);
    }
}

输出结果:
在这里插入图片描述
代码的执行结果为false,是因为String类为引用类型,使用 == 用来判断的是两个变量是否指向同一个对象。

内存布局:
上面的代码中 String str1 = “Aleng”; 申请一个空间用来存放“Aleng”,但是 String str2 = new String(“Aleng”); 相当于又重新申请了一块内存用来存放“Aleng”,导致内存中存放两份“Aleng”。
在这里插入图片描述代码的执行结果为false,是因为String类为引用类型,使用“==”用来判断的是两个变量是否指向同一个对象。

  1. 想要比较字符串内容是否相等,可以使用String类提供的equals方法。
public class Test1 {
    public static void main(String[] args) {
        //字符串比较
        String str1 = "Aleng";
        String str2 = new String("Aleng");
        System.out.println(str1.equals(str2));
    }
}

输出结果:
在这里插入图片描述[注意]
上面代码在使用equals方式时需注意str1不能为null,若str1为null则会抛出空指针异常。如图所示:

String str1 = null;
        String str2 = new String("Aleng");
        System.out.println(str1.equals(str2));

在这里插入图片描述

字符串常量池

在Java中,String类有两种实例化操作,直接赋值和构造方法。

直接赋值

 String str1 = "Aleng";
 String str2 = "Aleng";
 String str3 = "Aleng";
 System.out.println(str1==str2);  //true
 System.out.println(str1==str3);  //true
 System.out.println(str2==str3);  //true

内存布局:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 直接赋值实际上是将字符的内容自动放入字符串常量池中;
  • 使用直接赋值实例化String类,若在字符串常量池中有指定内容,则直接引用;若没有则开辟一块新的内存存放在以便于下次使用;

构造方法:

String string1 = new String("Acheng");
String string2 = new String("Acheng");
String string3 = new String("Acheng");
System.out.println(string1==string2);   //false
System.out.println(string1==string3);   //false
System.out.println(string2==string3);   //false

内存布局:
在这里插入图片描述

  • 使用String构造方法会开辟两块内存空间,其中一块会被当做内存垃圾被JVM自动回收;
  • 使用构造方法也会存在同一个字符串内容被多次存放浪费空间的问题。
    为了解决这一问题,可以使用String类中的intern()方法。intern()方法可以将字符串内容手工入池。
String str = new String("Acheng").intern();
String string = "Acheng";
System.out.println(str == string);   //true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值