Java教程

018Java面试002String常量池

本文主要是介绍018Java面试002String常量池,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1 对象生成个数

测试代码如下:

1 public static void main(String[] args) throws Exception {
2      String s1 = new String("abc");
3      String s2 = "abc";
4      String s3 = new String("abc");
5      System.out.println(s1 == s2);// false
6      System.out.println(s1 == s3);// false
7      System.out.println(s2 == s3);// false
8 }

上述代码执行后,在常量池中生成了一个对象,在堆中生成了两个对象(指向常量池中的对象)。

s1先在堆中创建了一个对象,然后在常量池中寻找字符串,没有找到则在常量池中创建一个对象,堆中保存常量池中对象的引用。

s2先在常量池中寻找字符串,找到了则返回常量池中对象的引用。

s3先在堆中创建了一个对象,然后在常量池中寻找字符串,找到了则返回常量池中对象的引用,堆中保存常量池中对象的引用。

2 对象创建机制

测试代码如下:

1 public static void main(String[] args) throws Exception {
2      String s1 = "java";
3      String s2 = "ja";
4      String s3 = "va";
5      System.out.println(s1 == "java");// true
6      System.out.println(s1 == (s2 + s3));// false
7      System.out.println(s1 == "ja" + s3);// false
8      System.out.println((s2 + s3) == (s2 + s3));// false
9 }

上述代码执行后,在常量池中生成了三个对象,在堆中生成了四个对象(指向常量池中的对象)。

s1先在常量池中寻找字符串,没有找到则在常量池中创建一个对象,返回常量池中对象的引用。

s2先在常量池中寻找字符串,没有找到则在常量池中创建一个对象,返回常量池中对象的引用。

s3先在常量池中寻找字符串,没有找到则在常量池中创建一个对象,返回常量池中对象的引用。

字符串在拼接时,先在堆中创建了一个对象,然后在常量池中寻找字符串,找到了则返回常量池中对象的引用,堆中保存常量池中对象的引用。

 

这篇关于018Java面试002String常量池的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!