字符串池(String Pool)

作者: 涅小黑 | 来源:发表于2020-03-18 23:52 被阅读0次

String是引用类型,但在项目中大量使用,JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间--String Pool

例子1

1 String a = "hello";
2 String b = "hello";
3 a == b //true
  1. 执行第一句的时候,JVM先去查找String Pool是否有"hello",有的话就返回给a,没有的话创建"hello"对象放到池子里面,并且返回给a
  2. b执行的逻辑跟a一样,所以 a == b 为true

例子2

1 String a = new String("hello");
2 String b = new String("hello");
3 a == b //false
  1. 执行第一句的时候,JVM先去查找String Pool是否有"hello",有的话就不创建了,并且在堆里面创建"hello",把堆里面的实例返回给a;没有的话创建"hello"对象放到池子里面,,并且在堆里面创建"hello",把堆里面的实例返回给a
  2. b执行的逻辑跟a一样
  3. 所以a和b都是拿到堆里面的对象,是不同的实例a == b 为alse

相关文章

网友评论

    本文标题:字符串池(String Pool)

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