什么后台做网站安全,微小店网站建设平台,塘沽有哪些互联网公司,网站流量统计平台三.String类学习
1.String#xff0c;StringBuffer#xff0c;StringBuilder的区别#xff1f;
2.字符串拼接用加号的原理 #xff1f;
3.字符串常量池如何理解#xff1f;
4.String的intern方法理解#xff1f;
5.String的equals方法和compareTo方法的使用#xf…三.String类学习
1.StringStringBufferStringBuilder的区别
2.字符串拼接用加号的原理
3.字符串常量池如何理解
4.String的intern方法理解
5.String的equals方法和compareTo方法的使用
6.String常用方法
7.String类和StringBuffer类的常用方法
待更新
待更新
三.String类学习
1.StringStringBufferStringBuilder的区别
①不可变性
String是不可变的value为final且指向字面量无修改方法StringBuffer和StringBuilder是可变的value直接保存在堆中有修改方法
②线程安全
StringStringBuffer线程安全StringBuffer解决线程安全StringBuilder线程不安全StringBuilder只是建立可变字符串
③使用流程
String 少量改变可以用(重新生成字面量并放入常量池)StringBuilder单线程多次改变(线程不安全但是改变字符串在堆中数组中改变)StringBuffer多线程多次改变(线程安全而且改变字符串在堆中数组中改变)
④String为什么不变呢
final修饰的value数组引用为final类型只是数组地址不变数组内容仍然可变private修饰value数组外部无法直接访问String类未提供修改数组元素的方法。而StringBuffer和StringBuilder都提供对value数组操作的方法
2.字符串拼接用加号的原理
①str1 str2 str3(都为变量)
实际上 str1 (new StringBuilder()).append(str1).append(str2).toString实际上 新建了StringBuilder对象并转换为String对象
②str3 str2.concat()
实际上产生了新的String对象并将字符串通过新建数组的形式凭借将数组作为new String的参数获得新的String对象即str2.concat()新建String对象然后将注意除非String直接赋值给字符串否则调用函数都是生成String类的对象。代码
package stringtest;public class StrinParaTest {public static void main(String[] args) {char[] a new char[]{a,b,c};String b new String(a);System.out.println(b);//abcString d1 b.concat(d);//concat实际上最后以new String(新数组)System.out.println(d1);//abcdString s a.toString();//a.toString实际上是以字符串类型返回的地址也就是字符串 只不过是地址的字符串System.out.println(s);//C1540e19d//故新建String对象由于String对象重写了toString方法故打印的为字符串//而cahr[]类型的数组并未重写toString,故其toString返回的是地址字符串类型}
}③使用
多次拼接用StringBuilder因为用String也会产生很多的StringBuilder对象而直接用StringBuilder只用产生一个
3.字符串常量池如何理解
①方法区中有专门存放字符串的常量池
②String a “abc”
在常量池中生成了abc字符串然后引用变量a直接赋值为常量池中的地址
②String b new String(“abc”)
若常量池已有abc,在堆中生成String对象然后value指向常量池若常量池没有abc,则先在常量池生成abc,再最后用value指向常量池
4.String的intern方法理解
①String a “a” “b”
编译期常量会直接合并故a指向常量池
②String b “a” a
生成StringBuilder对象后生成String对象value指向常量池
③String c (“abc” a).intern()
此时c由value指向常量池直接转化c直接指向常量池
④代码解析
package stringtest;public class StringDiffTest {public static void main(String[] args) {String a a b;String temp b;String b a temp;String c (a temp).intern();System.out.println(ab);//falseSystem.out.println(bc);//falseSystem.out.println(ac);//true//此时intern可以让引用直接指向常量池地址故ac但是利用StringBuilder方法生成的String仍然还是指向堆中对象}
}
5.String的equals方法和compareTo方法的使用
①String的equals方法重写
即比较字符串
②String的compareTo方法
实现Comparable接口重写CompareTo方法
6.String常用方法
①字符串是否回文
String转换为char类型数组循环StringBuilder和StringBuffer通过reverse toString equals来实现 注意因为StringBuilder和StringBuffer并未重写equals故需要先转化
②字符串大写小写
String类型的 toUpperCase toLowerCase
③比较字符串
compareTo 和 compareToIgnore
④String -char
char[] chars str.tocharArray();String str new String(chars);
⑤String-byte
byte[] bytes str.getBytes()String str new String(bytes)
⑥String-StringBuffer
String s StringBuffer.toString()String s StringBuffer “”StringBuffer s (new StringBuffer()).append(s)
7.String类和StringBuffer类的常用方法
①String常用方法
length charAt concat equals getBytes toCharArrays toUpperCase toLowerCase
②StringBuffer常用方法
增 append insert 删 delete 改 replace reverse 查 substring
③示例代码
package stringtest;public class StringTest {public static void main(String[] args) {//判断回文//1.String转化数组String a abcba;char[] chars a.toCharArray();int t 0;for(int i 0;ia.length()/2;i){if(chars[i] chars[a.length()-i-1]){t;}}if(ta.length()/2){System.out.println(是回文);}//2.String转化StringBuilderStringBuilder stringBuilder (new StringBuilder()).append(a);String s stringBuilder.reverse().toString();System.out.println(回文数(s.equals(a)));//3.对String方法的使用String p likejin;//String重写了equalstoString实现了compareToSystem.out.println(p.length());System.out.println(p.equals(p));System.out.println(p.toString());System.out.println(p.compareTo(p));//String和字节数组char数组StringBuffer的转换byte[] bytes p.getBytes();String q new String(bytes);char[] chars1 p.toCharArray();String m new String(chars);String s1 new StringBuilder().append(p).toString();String n s1.toString();//4.对StringBuilder方法的使用StringBuilder a1 new StringBuilder(likejin);//增删改查a1.append(like);a1.insert(11,changyu);a1.delete(0,2);a1.replace(9,14,);a1.substring(0);System.out.println(a1);}
}未更新
未更新