9.String类 StringBuffer/StringBuilder 的定义

String类:表示一个字符串,是引用数据类型

1.字符串存储格式:字符串用final修饰的char类型数组进行存储的

2.String的不可变性:字符串一旦初始化不可更改,但是可以通过在字符串常量池中重写创建一个字符串,改变引用的指向,进而改变字符串的值

 

 

3.String字符串的初始化

(1)直接赋值

(2)通过构造方法初始化

    a.public Sting(String str);

    b.public String(char[] c);

4.字符串的比较

"==":比较引用数据类型时,比较的是地址

直接赋值是指向字符串常量池(也在堆中),构造方法初始化的指向堆的

equals()方法:在字符串中,使用equals方法比较字符串内容

注:

(1)equals是超类Object中的方法,实质上使用"=="比较对象地址,但是String重写了该方法

(2)字符串的比较尽量不用"==",都是用equals

5.字符串常量拼接问题

1.字符串常量+字符串常量:在常量池中开辟空间

2.如果有字符串变量参与拼接:在堆中开辟空间

6.字符串的常用方法:

 (1)equals:用于比较字符串内容

 (2)equalsIgnoreCase:忽略大小写比较。ABC123 abc123

 (3)startWith

 (4)length();返回字符串的长度

 (5)charAt();

 indexOf(String str)

 subString():

 (7)toCharArray()

 (8)trim

 (10)replace

 (11)split

public class StringDemo {
    public static void main(String[] args) {
        String str="hello";//{'h','e','l','l','o'}
        str+="world";

        String str2="Java";
        String str3="Java";

        //2.通过构造方法初定义一个字符串
        String str4=new String("helloWorld");
        System.out.println(str4);

        char[] c={'字','符','串'};
        String str5=new String(c);
        System.out.println(str5);//"字符串"

        //字符串的比较
        String str6="happy";
        String str7="happy";
        String str8=new String("happy");

        //字符串拼接问题
        String str9="helloWorld";//在常量池中开辟空间
        String str10="hello"+"World";//先拼接成helloWorld.常量+常量 在常量池中

        System.out.println(str6==str7);//true str6和str7指向的同一个空间,说明地址相同
        System.out.println(str7==str8);//false str7指向的是字符串常量池的空间,str8指向的是堆中的空间
        System.out.println(str7.equals(str8));//true 看内容不看地址
    }
}

StringBuffer:

用于对字符串进行存储和操作,可以声明可变字符串,可以用于对字符串频繁的操作

1.StringBuffer的定义

  new StringBuffer(String str);

2.常用方法

(1)append(String str)方法:用于字符串的拼接

(2)toString():将字符串转换成String类型

(3)setCharAt(int index,char c);设置指定下标的字符

(4)replace(int start,int end,String str);替换指定下标范围的字符串

(5)reverse();将字符串反转

3.StringBuffer 的比较,转换成String类型来进行比较

4.StringBuffer和StringBuilder的区别StringBuffer是线程安全的,效率低;因为是用synchronized修饰的

StringBuild线程不安全,效率高

StringBuffer

public class StringBufferDemo {
    public static void main(String[] args) {
        String str="hello";
        StringBuffer buffer  =  new StringBuffer(str);
        //append()方法
        buffer.append("World").append("Java").append("Happy");

        //toString();方法
        String str2=buffer.toString();

        //setCharAt(int index,char c);
        buffer.setCharAt(0,'H');
        System.out.println(buffer);

        //replace();
        System.out.println(buffer.replace(0, 5, "Happy"));

        //reverse();
        System.out.println(buffer.reverse());//yppaHavaJdlroWyppaH

        //StringBuffer 的比较,转换成String类型来进行比较
        StringBuffer buffer1=new StringBuffer("hello");
        StringBuffer buffer2=new StringBuffer("hello");
        System.out.println(buffer1 == buffer2);//false
        System.out.println(buffer1.equals(buffer2));//false
        System.out.println(buffer1.toString().equals(buffer2.toString()));//True

        //StringBuffer 和 StringBuilder
        StringBuilder builder=new StringBuilder("hello");
    }
}

字符串String方法

public class StringMethods {
    public static void main(String[] args) {
        String str="helloWorldhello";//{'h','e','l','l','o','W',''}
        //判断字符是否以某子字符串开头
        boolean type=str.startsWith("hello");

        System.out.println(type);

        //length();返回字符串的长度,实质上返回的是存储字符的字符数组的长度
        System.out.println(str.length());

        //(5)charAt(int index);返回指定下标的字符
        System.out.println(str.charAt(1));

        //indexOf(String str):返回指定字符串在字符串第一次出现的下标
        System.out.println(str.indexOf("hello"));

        //lastIndexOf(String str):返回字符串最后一次在字符串中出现的下标
        System.out.println(str.lastIndexOf("hello"));

        //subString():截取指定下标范围内的字符串
        System.out.println(str.substring(5, 10));//截取范围[5,10)
        System.out.println(str.substring(1));//截取范围[1,正无穷)

        //toCharArray():把字符串转换成字符数组
        char[] arr=str.toCharArray();
        System.out.println(Arrays.toString(arr));
        System.out.println(arr);

        //trim:去除字符串首尾空白
        String str2=" 1 2 3 ";
        System.out.println(str2.trim());

        //replace
        System.out.println(str2.replace(" ", ""));

        //split():把字符串以指定的字符进行分割
        String str3="1,2,3,4,5";
        String[] strArray=str3.split(",");
        System.out.println(Arrays.toString(strArray));
    }
}

String和StringBuffer的区别

简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改;而字符串对象一旦产生后就不可以被修改,重新赋值其实是两个对象

StringBuffer的内部实现方式和字符串不同,StringBuffer的在进行字符串处理时,不生成新的对象,在内存使用上要优于串类。

所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入,删除等操作,使用StringBuffer要更加适合一些。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值