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

上一篇下一篇

猜你喜欢

热点阅读