当前位置: 代码迷 >> Java Web开发 >> String str1 = "abc" String str2 = new String("abc"); 差异
  详细解决方案

String str1 = "abc" String str2 = new String("abc"); 差异

热度:646   发布时间:2016-04-16 21:26:05.0
String str1 = "abc"; String str2 = new String("abc"); 区别
String str1 = "abc"; 
String str2 = new String("abc"); 他俩有什么区别啊 啊
------解决思路----------------------
引用:
Quote: 引用:


String str1 = "abc";                          //"abc"在常量池,引用str1存储的是"abc"在常量池的地址
String str2 = new String("abc");      //new String("abc") 在堆上分配内存,引用str2存储的是new String("abc") 在堆上的内存地址
//还有一点区别是str1的类加载时就完成了初始化,而str2 要在执行引擎执行到那一行代码时才完成初始化。


常量池和堆是一起的?能详细讲下在内存中的栈和堆上是咋样分配的?



常量池是JVM的一块特殊的内存空间。和堆没什么关系
我给你好好解释下吧:
1.String s1 = "ubuntu";  
   String s2 = “ubuntu”;

2.String s3 = new String("ubuntu");  
   String s4 = new String("ubuntu");  




很容易理解了吧  求给分


------解决思路----------------------
引用:
Quote: 引用:


String str1 = "abc";                          //"abc"在常量池,引用str1存储的是"abc"在常量池的地址
String str2 = new String("abc");      //new String("abc") 在堆上分配内存,引用str2存储的是new String("abc") 在堆上的内存地址
//还有一点区别是str1的类加载时就完成了初始化,而str2 要在执行引擎执行到那一行代码时才完成初始化。


常量池和堆是一起的?能详细讲下在内存中的栈和堆上是咋样分配的?




常量池是方法区的一部分,Java虚拟机运行时数据区内存主要有:堆,方法区、Java虚拟机栈、本地方法栈。
更详细的可以看
http://www.cnblogs.com/Cratical/archive/2012/08/21/2649985.html
  相关解决方案