字符串优化,与字符串的不可变,字符串对象重载的参数

来源:互联网 发布:淘宝嘻哈店铺 编辑:程序博客网 时间:2024/06/08 04:30

如有收获,请点赞,或是留言,以资鼓励。谢谢


字符串优化?


1:为什么要优化字符串

在开发中,有许多重复的字符串,字符串是对象,这些重复的字符串虽然值相同,但他们也是一个个独立的对象,这样的重复浪费了内存,故而优化。


2:优化怎么样规避一些雷区

前提提要:字符串优化啊,就是把字符串对象放在了常量池,以供大家引用,a="abc"; b="abc"; a的abc放在了常量池,此刻b也等于abc,值相同难道再出一个abc对象?这样不就浪费了,于是b的abc是引用了在常量池a中的那个abc,ab引用的同一个abc。


ab引用同一个abc,ab就不能让他们进行改变,再说你想改变也改变不了,制作字符串的char[]是final,且不提供方法修改,且不能继承写方法修改,所以你不用担心ab引用abc,ab会通过下标把abc值给改了去。


放在常量池的不止有优化的字符串,还有其他,比如int a=3;int b=3;此刻嘛,a==b,想必这种重复的值也是经过优化了嘛,具体有哪些,我也说不上来。


3:怎么样进行的优化。

String a="abc";String b="abc";,此刻abc这个字符串对象一开始就是放在了常量池进行优化,a引用abc,b引用的也是这个abc,所以a==b,true。


String a1=new String("abc");,此刻这个abc即是放在了堆上,自成一片地址交给a1引用,此时String b1=new String("abc");,a==b不成立,a的abc对象是一片地址,b的abc对象是一片地址,不共享。


String a1=new String("abc");String b1=a;,a==b成立,a的abc对象是一片地址,b引用a,也就是引用了abc的地址了,成立


字符串是一个类,此类中的方法有:

获得长度,替换,截取,去空格,前后缀比较,indexof("")返回查找到的字符第一次出现的下标,indexof("",int)从指定下标继续向右查找到又符合的下标,lastindexof(“”)返回最后一次查找到的下标,indexof(“”,int)从指定的位置反向(向左)返回查找到的最后一次下标,转换等等,详见api


但是由于是不可变字符串,这样做避免了重复减少了内存,但正是由于不可变,如果每个字符串内容都不一样呢?比如,循环中


for(int a=0;a<100;aII){

String b=a+i;

}

这种活不可变1字符串就没啥用了,该占着还是占着内存,于是出现了StringBuff...关键字记不住了,后面讲解。


提示:

字符串的几个构造方法,new String(byet[]),new String(byet[],int),new String(char[]),等,详见api,


它的意思不是,你传进什么参数我给你转换为字符串,而是根据你这个值啊,去编码中寻找对应的,可指定编码。


比如:byte[] a={97};此刻new String(a),打印的是a,byte[] a={9};此刻new String(a),打印的是方框,中间是问号,俗称乱码,因为你没有可用于显示的。


String a = "錢哦啊jkldjla";
byte[] b = a.getBytes();


a = new String(b, "GB2312");
System.out.print(a);


这个,先把繁体简体字母转换位byte数组,对应的数字分别是-27 88 -59 -74 -80 -95 106 107 108 100 106 108 97 这么多,然后在交给字符串,咋现在指定的gb2312(可以识别简体)


是的,繁体不能识别,最后打印的a的结果是?X哦啊jkldjla,这个,所以啊,字符串对象重载的参数,确实可以把字节数组,字符数组还原为字符串,不过的看你是否符合了。还原,就是个字符转换。

阅读全文
0 0
原创粉丝点击