String类的使用

本文详细探讨了Java中String对象的两种创建方式:字面量定义和使用构造器。讲解了String类的不可变性,以及在内存中如何分配和使用。举例说明了字符串连接、替换操作以及字符串常量池的工作原理。同时,通过代码示例展示了不同创建方式下对象的内存引用关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String实例化的方式
   方式一:通过字面量定义的方式
   方式二:通过new + 构造器的方式
面试题:String s = new String("abc");:方式创建对象,在内存中创建了几个对象?
      两个:一个是堆空间只能的new结构,另一个是char[]对应的常量池中的数据:"abc"。
String:字符串,使用一对“”引起来表示
  1.String声明为final的,不可被继承
  2.String实现了Serializable接口:表示字符串时支持序列化的
          实现了Comparable接口:表示String可以比较大小
  3.String内部定义了final char[] value用于存储字符串数据
  4.String:代表不可变的字符序列,简称:不可变性
     体现:1.当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
          2.当对现有的字符串进行连接操作时,也需要重新指定内存区域进行赋值,不能使用原有的value进行赋值
          3.当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域,不能使用原有的value进行赋值
  5.通过字面量的方式(区别与new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
  6.字符串常量池中是不会储存相同内容的字符串的
package com.atguigu.java;

import org.junit.Test;

public class StringTest {
        @Test
        public void test1(){
                String s1 = "abc";//字面量的定义方式
                String s2 = "abc";
                s1 = "hello";
                System.out.println(s1 == s2);

                System.out.println("s1=" + s1);//hello
                System.out.println("s2=" + s2);//abc

                System.out.println("******************");

                String s3 =  "abc";
                s3 += "def";
                System.out.println("s3=" + s3);

                System.out.println("**********");
                String s4 = "abc";
                String s5 = s4.replace("a", "m");

                System.out.println(s4);
                System.out.println(s5);
        }
}
        @Test
        public void test2(){

                //通过字面量定义的方式:此时的s1和s2的数据javaEE声明在方法区中的字符串常量池中
                String s1 = "javaEE";
                String s2 = "javaEE";

                //通过new + 构造器的方式:此时的s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值
                String s3 = new String("javaEE");
                String s4 = new String("javaEE");

                System.out.println(s1 == s2);//true
                System.out.println(s1 == s3);//fslae
                System.out.println(s1 == s4);//false
                System.out.println(s3 == s4);//false

                System.out.println("******************");

                Person p1 = new Person("px",20);
                Person p2 = new Person("px",20);

                System.out.println(p1.name.equals(p2.name));//true
                System.out.println(p1.name == p2.name);//true

                p1.name = "jerry";
                System.out.println(p2.name);

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东北炸鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值