栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

String类的一些总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

String类的一些总结

文章目录

String介绍创建字符串的三种方式equals方法字符串常量池字符串的不可变性StringBuffer类和StringBuilder类String和char之间的转化字符串其他的一些操作

字符串的比较字符串查找字符串替换字符串拆分

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 字符串查找

contains()方法

字符串替换

replaceAll()

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

字符串拆分

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

substring()截取部分内容

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/713326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号