美文网首页spring bootJava语言
改善Java程序的151个建议之字符串

改善Java程序的151个建议之字符串

作者: AaronSimon | 来源:发表于2019-04-02 22:04 被阅读74次

推荐使用String直接量赋值

Java系统中为了避免在一个系统中大量产生String对象,设计了字符串池(也叫字符串常量池)。

它的创建机制为:创建一个字符串时,首先检查池中是否有字面值相等的字符串,如果有则不再创建直接返回池中对象的引用,如果没有则创建,放在池中并返回新建对象的引用。

String str1 = "中国";//String Pool
String str2 = "中国";//String Pool

String str3 = new String("中国");// heap but not in string pool
String str4 = str3.intern();

String str5 = new String("中国香港");// heap but not in string pool
String str6 = str5.intern();

boolean b1 = (str1==str2);//true
boolean b2 = (str1==str3);//false
boolean b3 = (str1==str4);//true
boolean b5 = (str5==str6);//false
String str1 = "中国";//String Pool
String str2 = "中国";//String Pool

分析:因为“中国”这两个字直接使用了双引号声明,故JVM会在运行时常量池中首先查找有没有该字符串,有则直接返回该字符串在常量池中的引用;没有则直接在常量池中创建该字符串,然后返回引用。此时,该句代码已经执行完毕,不会在java Heap(堆)中创建内容相同的字符串。该字符串只在常量池中创建了一个String对象。

String str3 = new String("中国");// heap but not in string pool

分析:该行代码生成了两个String对象(Stack(栈)中的对象引用不在讨论范围内):

  • 第一步,因为“中国”两个字直接使用了双引号声明,故JVM会在运行时常量池中首先查找有没有该字符串,有则进入第二步;没有则直接在常量池中创建该字符串,然后进入第二步。
  • 第二步:在常量池中创建了一个String对象之后,由于使用了new,JVM会在Heap(堆)中创建一个内容相同的String对象,然后返回堆中String对象的引用。该行代码分别在常量池和堆中生成了两个内容相同的String对象。
String str3 = new String("中国");// heap but not in string pool
String str4 = str3.intern();

分析:“中国” 在池中有,则intern时,会直接返回池中对象

String str5 = new String("中国香港");// heap but not in string pool
String str6 = str5.intern();

分析:“中国” 作为字面量,放入了string pool中,而new时,str5 指向的是heap中新生成的string对象,地址不同,为false

replaceAll传递的第一个参数是正则表达式

String str1 = "abc";
String str2 = str1.replaceAll("a","");//str2= "bc"

String str3 = "$a$";
String str4 = str3.replaceAll("$","");//str4 = "$a$"

replaceAll传递的第一个参数是一个正则表达式,符合正则表达式的字符串才会被替换。"$"在正则表达式中表示的是字符串结束位置,执行完之后会在字符串结尾添加空字符串。

String、StringBuffer、StringBuilder

  • String 类是不可改变量,创建了之后就不再更改,通过String类提供的方法尝试修改,也是创建一个新的字符串对象
  • StringBuffer 和 StringBuilder 是一个可变字符序列,对其修改后,它的引用地址不会改变,但值在改变
  • StringBuffer线程安全
  • StringBuilder线程不安全

相关文章

  • 改善Java程序的一些建议

    一、改善Java程序的一些建议 The reasonable man adapts himself to the ...

  • 改善Java程序的151个建议之字符串

    推荐使用String直接量赋值 Java系统中为了避免在一个系统中大量产生String对象,设计了字符串池(也叫字...

  • 改善Java程序建议19

    建议19 : 断言不是鸡肋 基本用法:assert <布尔表达式>assert <布尔表达式> : <错误信息>在...

  • 改善Java程序建议14

    建议14:使用序列化类的私有方法巧妙的解决部分属性持久化问题。 对于不想持久化的属性有几种方法: 对于一些属性不想...

  • 改善Java程序建议12

    建议12:避免用序列化类在构造函数中为不变量赋值 一般来说,final标识的属性是不变量,也就是说只能赋值一次,不...

  • 改善Java程序建议1

    建议1:不要在常量和变量中出现易混淆的字母 包名要小写,类名首字母要大写,常量全部大写并用下划线分隔,变量采用驼峰...

  • 改善Java程序建议2

    建议2:莫让常量蜕变成变量 RAND_CONST 这种常量的定义方式是极不可取的,常量就是常量,在编译期就必须确定...

  • 改善Java程序建议4

    建议4:避免带有变长参数的方法重载 简单折扣后的价格是:¥374.25.这个重载有点特殊:calPrice(int...

  • 改善Java程序建议3

    建议3:三元操作符的类型务必一致。 运行结果是false。s = 90, s1 = 90.0. 三元操作符类型的转...

  • 改善Java程序建议11

    建议11:实现序列化接口的类,显示声明UID 我们在编写实现Serializable接口的类的时候,IDE会提示:...

网友评论

    本文标题:改善Java程序的151个建议之字符串

    本文链接:https://www.haomeiwen.com/subject/ssznbqtx.html