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类的一些总结的主要内容,如果未能解决你的问题,请参考以下文章