String类的用法

1.String是final修饰的,final修饰的类不能有子类

2.创建字符串的三种方式

String s = "hello word";
String s = new String("hello word");
char[] data ={'h','e','l','l','o'};
String s = new String(data); 

字面量:直接写出来的值就称为字面量

10 整形字面量

11.2浮点型字面量

“”字符串字面量

3.字符串的内存布局

String是一个引用数据类型,默认是null,并且对象在堆上存储

4.字符串比较相等时,使用equals方法,不能直接使用==

对于基本数据类型,==比较就是两个变量值,

对于引用数据类型,银两变量保存的是堆内存的地址而不是值,不能使用==比较内容。

==比较地址:

equals比较值:

 

 5.字符串的常量值

 产生的原因是什么?

JVM会对字符串创建一个字符串的常量池,当使用直接赋值创建字符串时,字面量第一次出现就会创建一个String对象并且扔入常量池中,当字面量第二次出现或者被多次引用时,并不会创建新对象,而是复用已有对象。

 

 这个结果出现的原因是什么呢?

有new 就有新空间,所以在比较地址时一定不相等。


通过其他方式创建字符串时,可以手工入池,使用intern方法

 总结:使用String创建对象就会使用直接赋值法,比较内容是否相等调用equals方法


6.字符串的“不可变”性

 此处只是s的指向发生了变化,指向了新的字符串对象"world",而对原字符串"hello"没有任何影响

为何String对象的内容无法修改?

String对象内容实际上存储在内部value[]中,value[]是一个private+final修饰的,value[]出了String类就不可见,无法使用。想要访问私有数据域,必修有getter方法,但是String类没有提供getter方法,外部无法使用value数组。final保证了value指向的地址不可变。

要想修改字符串变量的内容,只能通过反射破坏封装。

如果实在要修改字符串,可以使用substring()方法截取字符串。substring创建了一二个新的字符串变量,并不是修改原来的字符串对象。

由于字符串不可变性,弱国需要大量修改字符串内容时,我们使用两个sb类:

StringBuffer:线程安全

StringBuild:线程不安全,效率高

这两个SB类和String没有任何关系,这是两种不同的类型,千万不要混为一谈。

String ->StringBuild:调用SBuild的append或者通过构造方法传入String对象

 //String转StringBuild
        //通过构造方法将String转StringBuild
        StringBuilder sb = new StringBuilder("hello");
        //调用append方法将String变为StringBuild
        sb.append("world");
        sb.append("!!!");
        //此时sTRINGbuild内部存储的就是helloword!!!

StringBild ->String

 //将SB还原为String
        String ret = sb.toString();

StrngBuild具备一些String不具备的方法:(StringBuild内容可改,String内容不可改)

1.reverse 字符串反转

2.delete(int start,int end)删除指定范围内的内容  java中一般都是左闭右开区间

3.insert(int start,插入的数据)


7.String和char[]的相互转化

String ->char[]

取得String某一个具体的字符 Strng ->char[]

char[] ->String

String(char value[]) 将字符数组的所有内容变为字符串

String(char value[],int offset,int count)将部分字符数组的内容变成字符串

char charAt(int index)取得指定索引的字符

char[] toCharArray() 将字符串变为字符数组返回

8.char:处理文本内容时使用char

byte:一般用在网络传输或者输入输出使用,判断网速,默认单位就是byte

9.其他常用操作

equals:区分大小写的比较

eauqlsIgnoreCase:不区分大小写的比较

compareTo:比较两个字符串的大小关系

10.字符串的替换

String类的所有修改操作的内部都是创建一个新的字符串,字符串的不可变性!!无法修改原字符串。

repalceAll  替换所有字母

public class StringCode {
    public static void main(String[] args) {
    String s = "hello";
    String s1 = s.replaceAll("l","-");
        System.out.println(s1);
    }

replaceFirst  替换首字母

public class StringCode {
    public static void main(String[] args) {
    String s = "hello";
    String s1 = s.replaceFirst("l","-");
        System.out.println(s1);
    }

拆分操作:s.split

public class StringCode {
    public static void main(String[] args) {
    String s = "hello mxj hello java";
    String[] data = s.split(" ");//按照空格拆分
        String[] data1 = s.split(" ",2);//按照空格拆分,最多拆成两个字符串
        System.out.println(Arrays.toString(data));
        System.out.println(Arrays.toString(data1));
    }
}

特殊字符需要先转义:

String s = "192.168.1.1";
    //.属于java中的特殊操作符,访问操作符
        //此时需要转义处理
    String[] data = s.split("\\.");//需要转义
        System.out.println(Arrays.toString(data));

其他操作:trim 去掉字符串中的作呕空格,保留中间空格 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值