Java 高级编程——Java常用类---字符串相关的类——String

一、String类的特性

  • String类代表字符串,Java中所有的字符串字面值(如“abc”)都作为此类的实现类

  • String类是一个final类,代表不可变字符,且不可被继承

  • 字符串是常量,用双引号包含起来表示。他们的值在擦黄健之后不能更改。

  • String对象的字符内容是存储在一个字符数组value[]中的

  • String实现了Serializable接口:表示字符串是支持序列化的

  • 实现了 Comparable接口:表示String可以比较大小

  • String在内部定义了final char[] value用于存储字符数据

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
   
    /** The value is used for character storage. */
    private final char value[];

    /** Cache the hash code for the string */
    private int hash; // Default to 0

1.1String的不可变性

  • String:代表不可变的字符序列。简称不可变性

体现:

①:当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value上进行赋值
②:当对已有字符串进行连接操作时,也需要重新指定内存区域赋值,不能在原有的value上赋值
③:当调用String的replace方法修改指定字符串或字符时,也需要重新指定内存区域赋值,不能在原有的value上赋值

@Test

    @Test
    public void  test1(){
   
        //此处s1\s2共用一个"abc"
        String s1 = "abc";//字面量定义,
        /*
        s1首次使用"abc",在直接在方法区字符串常量池中直接生成了"abc"
        并把"abc"的首地址值赋给s1
         */

        String s2 = "abc";
        /*
        常量池中不会存在两个相同的字符串,所以这里s2得到的"abc"与s1得到的一样

         */


        String s3 = "abc";
        s3 += "def";
        System.out.println(s3 == s2);//false
        /*
        此处对s3的拼接操作,是在字符串常量池中又新建了一个字符串
         */


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

    }

输出

false
abc
mbc
false

1.2String的不同实例化方式(String 对象的创建)

1.2.1

        String str = "hello";

        //本质上this.value = new char[0];
        String s1 = new String();

        //this.value = original.value;
        String s2 = new String(String original);


        //this.value = Arrays.copyOf(value,value.length);
        String s3 = new String(char[] a);

        String s4 = new String(char[] a,int startIndex,int count);

1.2.2 String s1 = “abc”; 与 String s2 = new String(“abc”); 的区别

    @Test
    public void Test2(){
   
        /*
        String 的实例化方式
        方式一:通过字面量定义的方式
        方式二:通过new+构造器的方式
         */


        //字面量定义:此时的地址值是在方法区中字符串常量池中的唯一的地址值,常量池中只有一个“hello”
        String s1 = "hello";
        String s3 = "hello";

        //new:此时的地址值,是数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值