String类的一些总结

Posted z啵唧啵唧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了String类的一些总结相关的知识,希望对你有一定的参考价值。

文章目录

String介绍

  • 三大特殊的类:String、Object、包装类

  • String的底层是一个字符数组并且String是一个final修饰的类,final修饰的类不能有子类

内存图:

创建字符串的三种方式

1、直接赋值法

String str = "hello bit";       

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

  • 10----整形字面量
  • 11.2----默认是double
  • " "默认是字符串字面量

2、通过new来创建String对象

String str = new String("hello bit");

3、因为String的底层是字符数组,可以通过字符数组的方式创建字符串

char[]= data = 'a','b','c';

String str = new String(date);

equals方法

  • 字符串的比较不能用==比较,需要用equals方法,因为对引用数据来说,引用变量保存的是堆地址,而不是值,所以不能直接用 " == "比较

  • " == " 比较的是地址,可以用来比较的是两个变量的值int a=10; int b=10; 则a==10;

字符串常量池

  • JVM会对字符串创建一个字符串常量池,当使用直接赋值创建字符串的时候,字面量第一次出现,JVM就会创建一个String对象并扔到字符串常量池中,当字符串第二次引用并且多次引用的时候都是从这个常量池中去拿,就不会创建新的对象了,而是复用常量池中已经存在的对象。

  • 但是只有通过直接赋值的方法,才能使字符串放到字符串常量池中,通过new对象的方式是不可以的

  • 当然还是有方法让new出来的手工入池

字符串的不可变性

  • 可以明显看到str1最后的hash值都变了,说明并不是str1地址指向的hello变了,而是str1指向的内容变了

  • 这串代码一共new了几个对象呢?

答:一共new了5个对象。

"hello"一个、"world"一个、"helloworld"一个、"bit"一个、"helloworldbit"一个共5个,但是JVM在这方面进行了优化,当他发现有+操作符的时候,会将String类转换成StringBuilder类

StringBuffer类和StringBuilder类

  • 首先这两个SB类和String不是一个类,只是有些类似而已,并且StringBuilder是通过StringBuilder的构造器,在构造器的中传入一个字符串进行new对象。

  • StringBuider具备一些String没有的方法,StringBuider的内容是可以改的,String的内容是没有办法改的。

    • 一个例子:对StringBuider对象进行反转

从这个例子中可以发现,虽然值进行了反转,可是前后的hash值还是一样的,所以说他的内容实际上是可以进行修改的。

  • StringBuider的删除字符方法

    删除第五到第8个
    字符实际上是删除了第5个索引到第7个索引对应的内容,因为在java中一般牵扯到区间的值都是左闭右开[5,8)

String和char之间的转化

  • toCharArray()可以将String字符转转化为char数组

  • charAt()方法可以通过索引取得字符串每个位置对应的字符

字符串其他的一些操作

字符串的比较
  • equals() 这种比较区分字符串的大小写

  • equalsIgnoreCase()这种方法的比骄是区分字符串的大小写的

  • compareTo()对两个字符串的大小进行比骄,他的比较规则挺多的

    1.返回参与比较的前后两个字符串的ASCII码的差值,如果两个字符串首字母不同,则该方法返回首字母的ASCII码的差值。

    String a1 = "a";
    String a2 = "c";        
    System.out.println(a1.compareTo(a2));//结果为-2
    

    2.参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值。

    String a1 = "aa";
    String a2 = "ad";        
    System.out.println(a1.compareTo(a2));//结果为-3
    

    3.如果两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值。

    String a1 = "aa";
    String a2 = "aa12345678";        
    System.out.println(a1.compareTo(a2));//结果为-8
    

    4.int型可以直接比较,所以没有用到compareTo比较,如果声明的是Date、String、Integer、或者其他的,可以直接使用compareTo比较。

    Integer n1 = 5;
    Integer n2 = 6;
    System.out.println(n1.compareTo(n2));//结果-1  
     Integer a=5;
     Integer b=4;
     System.out.println(a.compareTo(b));//结果
    

    5.返回为正数表示a1>a2, 返回为负数表示a1<a2, 返回为0表示a1==a2。

字符串查找
  • contains()方法

字符串替换
  • replaceAll()

regex:要替换的内容、replacement:替换成为的内容

字符串拆分
  • split()方法进行字符串拆分

  • substring()截取部分内容

以上是关于String类的一些总结的主要内容,如果未能解决你的问题,请参考以下文章

Java-String类的常用方法总结

20165232 第六周学习总结

对部分常用类的细节总结

20175322 《Java程序设计》第七周学习总结

Java中String类学习总结

字符串常量是String类的匿名对象