String定义的问题 请问,String str = "abc";这个语句声明了几个对象?据说是两个(一个是引用,一个是内容为"abc"的字符串)请高手解释一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1个对象 ,就是abc,引用不能叫对象,引用是引用,对象就是对象。 只有一个对象就是abc这个字符串在内存中的实体,str只是这个字符传的引用,通过引用改变对象的内容或者改变这个实体,就好比你是一个人,而名字只是为方便叫你而取的一样,名字不等于对象。这个解释够清楚否? 只有abc在字符串常量池中.String a=new String("abc");//产生两个对像,一个在字符串常量池中,一个是在常规内存中 String str = "abc";str是object variable"abc"是objectobject variable里存的是reference,所以也就把它叫做reference.翻译过来的说法就有点乱了.. gongyali2005(JAVA 民工)请问字符串常量池在哪?说详细点吧 这说法头一次听说... gongyali2005(JAVA 民工)请问字符串常量池在哪?说详细点吧 这说法头一次听说...String s1 = "abc";String s2 = new String ("abc");这两个并不相等,第一个声明了一个对象,就在常量池中。第二个我觉得也是声明了一个,只是在内存中的“abc”看看下面这个程序public class Test { public static void main (String args[]) { String s1 = "abc"; String s2 = new String ("abc"); String s3 = "abc"; String s4 = new String ("abc"); System.out.println(s1==s2); System.out.println(s1==s3); System.out.println(s2==s4); }}结果是falsetruefalses1 和 s3 的引用都是指向常量池中的abcs2 和 s4 分别指向不同的内存池,相互独立。所以 常规上,String s1= "abc" 比String s1= new String ("abc");效率要高,虽然后者看起来更符合对象的声明办法。 String s1="abc" 这是一个对象String s1=new String("abc") 这是两个对象 Top lc328(FEEL) ( ) 信誉:100 Blog 2007-04-01 23:02:16 得分: 0 String s1="abc" 这是一个对象String s1=new String("abc") 这是两个对象 ------------------------------------我无法想通的就是为什么String s1=new String("abc")是两个对象注意,我们讨论的并不是在之前已经有“abc”的情况下,用String s1=new String("abc")方法和String s1 = "abc";方法的区别,这个我知道。。我们仅仅讨论String s1=new String("abc")这句话有几个对象产生。根据公认的知识,String(应该说是所有对象吧)的内容(content)是存放在堆中的,而引用(ref)是放在栈里的,我最开始怀疑,总不能说存在着两部分,就说这一句定义了两个对象吧? 你理解不了 是因为你不懂JVM的堆栈机制不要局限于这种初级的问题 等你再学段时间 自然而然就懂了 String str1 = new String("abc");语句,这里"abc"本身就是字符串常量池(也就是栈,如果之前栈中有“abc”,则不创建abc了,如果没有,就在栈中创建一个“abc”)中的一个对象,而在运行时执行new String()时,将字符串常量池中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给str1持有,结论2个对象。 String s=new String("abc")是将abc的副本(也是个对象)的引用赋值给s,即s是引用。而String s="abc"是直接将abc的引用赋值给s! 一个对象也没有 它只是声明了一个引用字符串"abc"的变量str 是2个对象没错~!涉及到内存分析.String str = "abc";str 是分配在栈内存的,而"abc"是分配在数据区 !str是指向"abc"的引用!这么说不知道对不对? 也是新人.... 这题应该去考C++去。管java什么事。 String str="abc";最多产生了一个对象 具体问题要具体分析:String 是一个特殊的类 字符串池中的内容 叫字符面量 内容不能修改String 用 双引号 赋值 将放入字符串池中 池中没有 就立即创建一个对象有 就直接拿来用 所以 说 要分情况 但不会产生两个对象的另外 引用 不产生对象 一个对象,就是存储字符串"abc"的变量. String str = "abc";要是栈中已经存在"abc",则一个对象也不产生要是不存在"abc",产生一个对象 应该是一个对象吧,str只是对象abc的名字(即引用)吧。也就是说在名字str下有个对象内容是abc. 求助,sql server2008的登录问题 类字面值是什么意思 java 向oracle 批量插入数据 关于 GetPropertyAction 的问题 关于java图形界面的问题:为什么运行后我的程序不能正常显示应该显示的界面 关于填加海图获取GPS导航信息 求助java静态代码块内变量的使用 我在sun公司下载了一个linux下的jdk。安装包的扩展名为.bin请问怎么安装? 关于文件的问题 java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing 请问怎么获得鼠标在pdf文件上左键点击下去的坐标啊?急!!!! 奇怪的报错!
String a=new String("abc");//产生两个对像,一个在字符串常量池中,一个是在常规内存中
"abc"是object
object variable里存的是reference,所以也就把它叫做reference.翻译过来的说法就有点乱了..
请问字符串常量池在哪?
说详细点吧 这说法头一次听说...
请问字符串常量池在哪?
说详细点吧 这说法头一次听说...
String s1 = "abc";
String s2 = new String ("abc");这两个并不相等,
第一个声明了一个对象,就在常量池中。第二个我觉得也是声明了一个,只是在内存中的“abc”看看下面这个程序
public class Test {
public static void main (String args[]) {
String s1 = "abc";
String s2 = new String ("abc");
String s3 = "abc";
String s4 = new String ("abc");
System.out.println(s1==s2);
System.out.println(s1==s3);
System.out.println(s2==s4);
}
}结果是false
true
falses1 和 s3 的引用都是指向常量池中的abc
s2 和 s4 分别指向不同的内存池,相互独立。所以 常规上,String s1= "abc" 比String s1= new String ("abc");效率要高,虽然后者看起来更符合对象的声明办法。
String s1=new String("abc") 这是两个对象
lc328(FEEL) ( ) 信誉:100 Blog 2007-04-01 23:02:16 得分: 0
String s1="abc" 这是一个对象
String s1=new String("abc") 这是两个对象
------------------------------------
我无法想通的就是为什么String s1=new String("abc")是两个对象注意,我们讨论的并不是在之前已经有“abc”的情况下,用String s1=new String("abc")方法和String s1 = "abc";方法的区别,这个我知道。。我们仅仅讨论String s1=new String("abc")这句话有几个对象产生。根据公认的知识,String(应该说是所有对象吧)的内容(content)是存放在堆中的,而引用(ref)是放在栈里的,我最开始怀疑,总不能说存在着两部分,就说这一句定义了两个对象吧?
不要局限于这种初级的问题
等你再学段时间 自然而然就懂了
而String s="abc"是直接将abc的引用赋值给s!
它只是声明了一个引用字符串"abc"的变量str
涉及到内存分析.
String str = "abc";str 是分配在栈内存的,而"abc"是分配在数据区 !
str是指向"abc"的引用!这么说不知道对不对? 也是新人....
管java什么事。
最多产生了一个对象 具体问题要具体分析:
String 是一个特殊的类
字符串池中的内容 叫字符面量 内容不能修改
String 用 双引号 赋值 将放入字符串池中 池中没有 就立即创建一个对象
有 就直接拿来用
所以 说 要分情况 但不会产生两个对象的另外 引用 不产生对象
要是栈中已经存在"abc",则一个对象也不产生
要是不存在"abc",产生一个对象