Java_String类

【一】String的本质

【1】直接使用,无需导包

在这里插入图片描述

【2】形象的说一下字符串

The {@code String} class represents character strings.

在这里插入图片描述

【3】接口

在这里插入图片描述
String str=“abc”;
"abc"就是String类下的一个具体的对象

【4】字符串是不可变的

在这里插入图片描述

【5】这个String类不可以被继承,不能有子类

在这里插入图片描述

【6】String底层是一个char类型的数组

在这里插入图片描述
验证:
在这里插入图片描述

【二】String的常用方法

【1】构造器:底层就是给对象底层的value数组进行赋值操作。

在这里插入图片描述

【2】常用方法

		String s4="abc";
        System.out.println("字符串的长度为:"+s4.length());

        String s5=new String();
        System.out.println("字符串是否为空:"+s5.isEmpty());

        System.out.println("获取字符串的下标对应的字符为:"+s5.charAt(1));

【3】equals方法

		String s6="abc";
        String s7="abc";
        System.out.println(s6.equals(s7));

在这里插入图片描述

【4】comparaTo

String类实现了Comparable,里面有一个抽象方法叫comparaTo,所以String中一定要对这个方法进行重写。

String s8="abc";
        String s9="abc";
        System.out.println(s8.compareTo(s9));

在这里插入图片描述

【5】

//字符串的截取
        String s10="asdfghjk";
        System.out.println(s10.substring(3));
        System.out.println(s10.substring(3, 6));//[3,6)


        //字符串的合并/拼接
        System.out.println(s10.concat("pppp"));

        //字符串中的字符的替换:
        String s11="aadsgwgvasasfe";
        System.out.println(s11.replace('a', 'u'));

        //按照指定的字符串进行分裂为数组的形式:
        String s12="a-b-c-d-e-f";
        String[] str2 = s12.split("-");
        System.out.println(Arrays.toString(str2));

        //转大小写的方法:
        String s13="abc";
        System.out.println(s13.toUpperCase());
        System.out.println(s13.toUpperCase().toLowerCase());

        //去除首位空格:
        String s14="     a  b   c     ";
        System.out.println(s14.trim());

        //toString()
        String s15="abc";
        System.out.println(s15.toString());

        //转化为String类型:
        System.out.println(String.valueOf(false));

【三】String的内存分析

【1】字符串的拼接

public class Test02 {
    public static void main(String[] args) {
        String s1="a"+"b"+"c";
        String s2="ab"+"c";
        String s3="a"+"bc";
        String s4="abc";
        String s5="abc"+"";
    }
}

上面的字符串会进行编译器优化,直接合并成为完整的字符串,我们可以反编译验证:

public class Test02 {
    public static void main(String[] args) {
        String s4="abc";
        String s4="abc";
        String s4="abc";
        String s4="abc";
        String s4="abc";
    }
}

然后在常量池中,常量池的特点是第一次如果没有这个字符串,就放进去,如果有这个字符串,就直接从常量池中取:
内存:
在这里插入图片描述

【2】new关键字创建对象:

String s6=new String("abc");

内存:
开辟两个空间(1.字符串常量池中的字符串 2.堆中开辟的空间)
在这里插入图片描述

【3】有变量参与的字符拼接

public class Test03 {
    public static void main(String[] args) {
        String a="abc";
        String b=a+"def";
        System.out.println(b);
    }
}

a变量在编译的时候不知道a是“abc”字符串,所以不会进行编译期优化,不会直接合并为:“abcdef”
反汇编过程:为了更好的帮我分析字节码文件时如何帮我解析的

利用IDEA中的控制台:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值