请问:String s1 = new String("abc");和String s2 = "abc";有什么不同?主要是内存中的堆中、栈中的情况。非常谢谢大家啊。
解决方案 »
- 求助啊,连不上java连不上sql sever 2008
- 大家帮我看下这个SQL语句该怎么写啊!高手来
- 谁能帮我回答几个weblogic和JAVA的问题
- 海量邮件的检索,能不能用JAVA做,能的话各位大侠请给我建议
- 救助:字符串对比的问题。StringBuffer 和 String 的不同!
- SOS!!!一个很重要的图形绘制功能
- ant如何将要包含的其他文件目录打包?
- 请同志们帮我看看这个程序,怎么在ROOT下没法显示!(JSP问提)!
- 在ultraEdit中运行dos命令怎样设置使dos窗口输出信息显示在output窗口里面而不显示在一个新文件里面
- Generics
- 如何获得可用分
- 下面两段代码哪一段的执行效率高?
都是String的对象类型
都是被放在堆内存中,而不是栈内存
String s2 = "abc";是直接在字符串池中查找得到;
两者不一样
栈,用来存取基本类型数据和一些对象的引用。
堆,用来存取new出来的对象或数组。
两个表达式都从栈中申请了部分空间,但第一个要从堆中申请空间,而第二个有可能申请也有可能不申请。这里涉及到了对象缓存池的概念,如果"abc"已经在池子中了,那么s2就直接应用到它了,而无需从堆中申请空间了。
那字符串常量池也是在堆内存中的两种方式创建出来的对象都会被放到String的常量池中
如果采用new的方式就是直接在堆中创建对象,JVM不会主动把它放进对象池中。