JAVA字符串池问题/String对象创建问题
2017-09-17 00:39
453 查看
在Java语言中,所有的常量将在编译后的.class字节码文件中开有一个常量区,在运行时,将在内存中占用这么一个内存区。JAVA字符串池是常量区的部分;
字符串池存放着程序中创建的所有字符串常量;任何时候创建字符串常量系统都会搜索字符串池,查看是否存在该字符串常量。
先在字符串池中查找“myname”和“yourname”两个字符串,这里存在“myname”,所以在字符串池中只新创建字符对象“yourname”;
2、new一个String对象
先执行上面一步,新创建了“yourname”对象;new操作符时,将字符串池中的“myname”和“yourname”各传一个副本(即赋值一份)到 heap(堆栈)中,新建两个对象。一共新创建三个对象。
s =“apple”+“pen”;将产生几个对象?
在java中,两个字符串常量将直接连接,不会产生多余常量对象,所以只新生成一个常量对象“applepen”。
s = “apple” + new String(“hahaha”) + “pen”将产生几个对象?
这种情况下,只会产生最后的“applehahahapen”,不会生成中间的“applehahaha”;所以这里新生成两个对象“hahaha”和“applehahahapen”。
s=“hello”;s = s+“hahaha”;将产生几个对象?
参照第二个例子,这里生成三个对象:“hello”、“hahaha”、“hellohahaha”。
字符串池存放着程序中创建的所有字符串常量;任何时候创建字符串常量系统都会搜索字符串池,查看是否存在该字符串常量。
String对象的创建
1、创建一个String类的实例String name = "myname"; String hisname = "yourname";
先在字符串池中查找“myname”和“yourname”两个字符串,这里存在“myname”,所以在字符串池中只新创建字符对象“yourname”;
2、new一个String对象
String name = new String("myname"); String hisname = new String("yourname");
先执行上面一步,新创建了“yourname”对象;new操作符时,将字符串池中的“myname”和“yourname”各传一个副本(即赋值一份)到 heap(堆栈)中,新建两个对象。一共新创建三个对象。
s =“apple”+“pen”;将产生几个对象?
在java中,两个字符串常量将直接连接,不会产生多余常量对象,所以只新生成一个常量对象“applepen”。
s = “apple” + new String(“hahaha”) + “pen”将产生几个对象?
这种情况下,只会产生最后的“applehahahapen”,不会生成中间的“applehahaha”;所以这里新生成两个对象“hahaha”和“applehahahapen”。
因为sun的javac把上面代码编译成了Java代码: new StringBuilder("a").append(new String("b")).append("c").toString() 真正遵循规范的“+”要这么写: "a".concat("b").concat("c") 这样才会产生"ab"这个字符串 所以实际应用中,完全不要担心"a" + "b" + "c"这样的写法 但要注意类似下面的东西: for (String x = ...) s = s + x; 这个每次循环都会生成一个字符串,这时改成s.append(x)才好
s=“hello”;s = s+“hahaha”;将产生几个对象?
参照第二个例子,这里生成三个对象:“hello”、“hahaha”、“hellohahaha”。
相关文章推荐
- Java中String创建字符串创建对象问题
- Java面试题——关于String创建几个对象问题
- 关于Java String对象创建问题
- JAVA创建String对象的问题
- String创建对象的问题(java面试题)
- Java问题解析:到底创建了几个String对象?
- JAVA创建String对象的问题
- Java问题解析:到底创建了几个String对象?
- 关于Java String对象创建问题解惑
- Java问题解析:到底创建了几个String对象?
- Java问题解析:到底创建了几个String对象?
- 【转】关于Java String对象创建问题解惑
- java String 对象的创建问题
- 关于Java String对象创建问题解惑
- Java中String显式声明的对象创建问题
- JAVA创建String对象问题
- 关于Java String对象创建问题解惑
- JAVA中对象的创建以及String的对象个数问题
- 关于Java String对象创建问题解惑
- String对象与java字符串池——到底创建了几个String对象