目录
String
1) String 对象用于保存字符串,也就是一组字符序列
2)字符串常量对象是用双引号括起的字符序列。例如:“你好”、"12.97"、"boy"等
3)字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
4)String类较常用构造器(其它看手册):
String s1 = new String()
String s2 = new String(String original)
String s3= new String(char[] a)
String s4 = new String(char[] a,int startlndex,int count)
String的继承图
实现了Serializable表示他可以串行化, 也就意味着这个对象可以在网络传输
实现了Comparable就意味着, 它的对象可以相互比较, 比较大小
字符串在保存数据的时候, 它真正保存到 private final char value[]; char数组里面 , 因为value[]是final修饰, 所以不可以修改, 这里的不能修改是不能在指向别的空间地址, 但是数组里面的单个的字符是可变的
创建String对象的两种方式
1)方式一: String s= "hspedu";
2)方式二: 调用构造器String s=new String("hspedu");
两种创建对象的区别:
1.方式一:先从常量池查看是否有"hsp"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址
2.方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间。 如果常量池没有"hsp",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。
测试题
知识点:
当调用intern 方法时,如果池已经包含一个等于此 String 对象的字符串(用 equals(Object)方法确定),则返回池中的字符串的引用地址。否则,将此 String 对象添加到池中,并返回此 String 对象的引用
解读;(1) b.intern()方法最终返回的是常量池的地址(对象)
为什么p1.name==p2.name为true , 因为虽然p1, p2对象分别指向堆中的地址, 但是p1.name和p2.name都在堆中指向了同一个常量池地址
字符串的特性
1) String是一个final类,代表不可变的字符序列
2) 字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的
测试题:
1)
在s1="hello"的时候在常量池创建了一个对象
在s1="haha"的时候在常量池当中去找发现没有这个字符串, 便又创建这个对象, 并重新指向了它
2)
3)
一共创建了3个String对象
String c = a + b 具体执行:
进入了StringBuilder()的构造器, 所以第一步-->先创建了一个StringBuilder sb =new StringBuilder()
断电跳出后再追, 调的是 StringBuilder的append 方法, 传进去的是"hello"
在回来
在追进去
我们发现又调用了 StringBuilder的append 方法, 传进去的是"abc"
在出来后再追进去, 调用了toString方法
去new一个对象, 通过构造器, 取value前面的8 个数据(这里count为8)
4)
这里输出的是hspand 和 hava, 因为ex.str只是在方法里面指向了新的地址, 但是ex对象的str指向始终没变
String的常见方法
说明
String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilder 和 StringBuffer 来增强String的功能, 并提高效率。
String类的常见方法一览
equals // 区分大小写,判断内容是否相等
equalslgnoreCase //忽略大小写的判断内容是否相等
length //获取字符的个数,字符串的长度
indexOf //获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
lastlndexOf //获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回-1
substring //截取指定范围的子串
trim //去前后空格
charAt //获取某索引处的字符,注意不能使用Str[index] 这种方式
toUpperCase //转换成大写
toLowerCase //转换成小写
concat //拼接字符串
replace //替换字符串中的字符
split //分割字符串, 对于某些分割字符,我们需要转义比如\\等
compareTo //比较两个字符串的大小
toCharArray //转换成字符数组
format //格式字符串,%s字符串 %c字符 %d整型 %.2f浮点型
个别案例:
substring
concat
replace
注意: s1.replace()方法执行后,返回的结果才是替换过的。s1没有任何影响, 下面当中s1还是等于"宝玉 and 林黛玉 林黛玉 林黛玉"
split
注意两个斜杠需要转义 , 即有特殊字符的时候每个特殊字符都需要加 \ 进行转义, 下面有两个斜杠也就是拉个特殊字符加了两个转义 \
toCharArray
compareTo
此处是先让a的 j 字符和b 的 j 字符比 , 如果一样, 再让a的第二个字符 c 和 b的第二个字符 a 比, 'c'-'a'返回得到2
如果a和b的前三个字符都一样, 便比较长度, 返回-1
format
通过%s字符串 %c字符 %d整型 %.2f浮点型 占位符去填充字符串
字符串反转