String是引用类型,但在项目中大量使用,JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间--String Pool
例子1
1 String a = "hello";
2 String b = "hello";
3 a == b //true
- 执行第一句的时候,JVM先去查找String Pool是否有"hello",有的话就返回给a,没有的话创建"hello"对象放到池子里面,并且返回给a
- b执行的逻辑跟a一样,所以 a == b 为true
例子2
1 String a = new String("hello");
2 String b = new String("hello");
3 a == b //false
- 执行第一句的时候,JVM先去查找String Pool是否有"hello",有的话就不创建了,并且在堆里面创建"hello",把堆里面的实例返回给a;没有的话创建"hello"对象放到池子里面,,并且在堆里面创建"hello",把堆里面的实例返回给a
- b执行的逻辑跟a一样
- 所以a和b都是拿到堆里面的对象,是不同的实例a == b 为alse
网友评论