string 的疑惑

问题描述

String str="abc"和String str=new String("abc");这两种方法声明一个String类型对象有区别吗?区别在哪里? 问题补充:斐斐宝贝 写道

解决方案

java虚拟机的运行时数据区有如下几个:方法区、堆、Java栈、PC寄存器、本地方法栈,其中方法区中存储了类信息、常量池(final常量、字符串)、静态变量等。运行时创建的所有类实例或数组都放在堆中。下面来说说你的问题:String str="abc";//在方法区中的常量池里存储了"abc"String str=new String("abc");//在方法区中的常量池里存储了"abc",并在栈中了存储了一个String类实例,这个类实例有一个指针指向方法区的"abc".另外说明一点:方法区中的常量只会有一份,即String str="abc";String str=new String("abc");这两个代码一起执行也只会在方法区中存储一份"abc",在堆中存储一个String类实例,及大众面试题经常提问的创建了几个对象:2个.想继续深入了解可以看看这个帖子(需要一定的虚拟机基础):http://www.iteye.com/topic/774673
解决方案二:
这个回答的很清楚了<a href="http://zhidao.baidu.com/question/81333323.html">http://zhidao.baidu.com/question/81333323.html</a>
解决方案三:
既不是堆 也不是栈 是在方法区 如果是sun的hotspot叫持久代
解决方案四:
字符串池,个人认为就是常量池,从常量池的定义就可以知道
解决方案五:
String str="abc"是声明一个str的变量,并直接给str赋值;在内存中的变化时,在堆内存(str)和栈内存(abc)都开辟一个空间。String str=new String("abc");声明了一个str的变量,它的内存运行顺序:1.String str = new String("");2.将字符串缓存池中的已经存在的str对应的值abc,给str这个对象。
解决方案六:
字符串池不在堆内存也不在栈内存
解决方案七:
Java运行环境有一个字符串池,由String类维护。执行语句String str="abc"时,首先查看字符串池中是否存在字符串"abc",如果存在则直接将"abc"赋给str,如果不存在则先在字符串池中新建一个字符串"abc",然后再将其赋给str。执行语句String str=new String("abc")时,不管字符串池中是否存在字符串"abc",直接新建一个字符串"abc"(注意:新建的字符串"abc"不是在字符串池中),然后将其付给str。前一语句的效率高,后一语句的效率低,因为新建字符串占用内存空间。String str=newString()创建了一个空字符串,与String str=new String("")相同。

时间: 2024-09-28 18:34:17

string 的疑惑的相关文章

关于Class类,getDeclaredField(String name)疑惑

问题描述 小弟在该方法执行Field field = cla.getDeclaredField(columnName);的时候出现一下异常:java.lang.NoSuchFieldException: c_namec_name是数据库中的一个字段.代码如下:public List<Object> find(String sql, Class cla, Object... obj) throws Exception {List list = new ArrayList();Connection

Java的string类常量池及不可变性

1.String常量池     当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中.即new String("hello")一共产生了两个字符串对象. [常量池constant pool]管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类.方法.接口中的常量,和字符串常量.  [字符串常量池

JS异步传递数组Action接受的实现与疑惑

最近开发中遇到了页面传递数组到Action后台List类型,接受到的list对象并不是想象的按照数组元素位置对应的接受,例如数组的0位置插入到list对象的0位置, 而是数组的全部内容全部插入到了list集合的第一位置.经过反复的试验,没有找到很好的解决办法,只能把这种粗糙的实现方式记录下来,以求抛砖引玉望大家能给出更好的实现方式. 这是jsp页面代码:异步提交数组到Action中: <html> <head> <meta http-equiv="Content-T

servlet-关于Servlet过滤器修改输出内容的疑惑

问题描述 关于Servlet过滤器修改输出内容的疑惑 如题,先上代码,代码很简单,一个将jsp输出内容转为大写字母的过滤器: ```public class UpperCaseFilter implements Filter { private HttpServletRequest request; private HttpServletResponse response; public void init(FilterConfig config) throws ServletException

string-C# split和join方法的疑惑?请各位帮忙看看

问题描述 C# split和join方法的疑惑?请各位帮忙看看 var lineTxt=""; 经过一系列转换lineTxt是M00T11;; char[] charSeparators = new char[] { ';' }; string[] array = lineTxt.Split(charSeparators,StringSplitOptions.RemoveEmptyEntries);//在这里如果我想每三个字符为一个数组该怎么实现呢? lineTxt = string.

[Java 泥水匠] Java Components 之一:Java String (肯定有你不懂的)

1.2 你好 String         怀着初次见你的心情,泥瓦匠和你一起打开JDK1.7文档.我最近想写一些关于JDK1.7的理解,都知道JDK8出来了,新特性我准备下阶段有空学习.         泥瓦匠想说,阅读E文文档有利于体会原汁原味.但毕竟国内大牛翻译的很不错了,咱们不加评判,喜欢哪种自己挑.能抓老鼠,能解决实际项目,适应业务环境的就是你学到了.请看下面的小例子: 清单1.1 String abc = "abc"; char data[] = {'a','b','c'}

swift-Swift语言初始化加!的疑惑

问题描述 Swift语言初始化加!的疑惑 var nsUrl: NSURL = NSURL(string: url)! 我是想知道 上面代码的!是上面意思 发现很多地方都会有这种写法 解决方案 NSURL是一种类型,上面的nsurl定义了一下NSURL类型

关于正则,那些年一直存在的疑惑解答(正则菜鸟不容错过)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 因为小宝鸽正则表达式用得不多,一般也就网上找找js验证手机号.邮箱.qq.身份证号码的正则表达式,然后使用.那些正则表达式,看着似懂非懂的样子,始终存在一些疑问,几番想系统学习一下正则表达式,但是那些疑惑就像修仙大道的心结,让我正则表达式水平毫无存进.最近刚好有这样的时间把这些问题弄明白,并且对正则表达式有了入门的理解. (1)为什么很多JavaScript正则表达式串都是

我对java String的理解 及 源码浅析

一.char说起到String 这也是自己第二次回过头来啃java基础书,小生自认为愚昧无知.如果大神有好的教育,可以评论私信.以下都是我的看法: 为什么说char 呢,我这里先卖个关子.在java中,char是用unicode编码的,占16位(2字节).从ansi编码(1字节)到unicode编码(2字 节).Java中使用Unicode的原因是,Java的Applet(网页)运行,Unicode里面包含最多最广比如:中 文,English,Spanish,German, French等.因此