2020-03-23-Java的特殊类型String
2020-03-24 本文已影响0人
耿望
格式化和正则表达式
public static void main(String[] args) {
String content = String.format("format, %d, %b, %s, %#x, %.2f", 1, true, "zgw", 17, 0.5f);//1
System.out.println(content);
List<String> list = Arrays.asList(content.split(","));//2
list.forEach(k -> System.out.println(k));
}
java提供了两种方式,可以对字符串进行处理,分别是注释1处的format和注释2处的split方法。
常量池
为了避免对象的频繁创建和回收,JVM虚拟机有常量池的概念,比如下面的代码,在常量池中只会存在一个字符串实例"abc"。
String aStr = "abc";
String bStr = "abc";
String cStr = new String("abc");
更经典的问题是,下面这行代码,实际上创建了两个对象,一个在常量池中,一个在java堆内存区域。
String a = new String("abc");
同时,String提供了intern方法,来向运行时常量池添加变量,如果变量已经存在,则返回该变量的引用。比如下面这段代码,在java8上面输出的结果是false,true。
String a = new String("abc");
String b = "abc";
System.out.println(a == b);
System.out.println(a.intern() == b);
参考:
https://tech.meituan.com/2014/03/06/in-depth-understanding-string-intern.html
https://blog.csdn.net/lonely_fireworks/article/details/7962171