java里String str = new String("ss")创建了几个对象?为什么?分别是那些对象?在内存的分配如何?

如题所述

首先java虚拟机分为堆区,栈区,代码区,数据区
创建了一个对象
在执行String str =new String("ss")的时候 在堆区划分了一块内存给str,内容是ss,同时在栈区会存在一个对str的引用
例如:拿QQ举个例,桌面上的QQ快捷方式 并不是QQ.exe所在的位置
如过把QQ.exe所在的位置看成是堆区,那么桌面的快捷方式就是在栈区里面的,原理就是这样
补充一点:
String str=new String("ss");
String s="ss";
String t=ss;
System.out.println(str==s);
System.out.println(str==t);
System.out.prtintln(s=t);
输出是false,false,true
直接赋值还有一个常量池的概念,new String(); 就没有经过常量池,想对了解就留言吧
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-15
楼上的回答不尽准确。。
只创建了一个对象,在堆中分配了一块内存,保存的是“ss”这个字符串的值,然后在栈中有一个内存保存的是堆里面“ss”这个字符串的引用str。也就是说,栈中str是一个引用,指向堆中“ss”这个字符串的地址。
第2个回答  2011-08-15
创建了两对象,new String创建了一个对象, 用new String创建对象使用的是另一个对象,也就是"SS"也是一个String对象,然后返回引用
第3个回答  2011-08-16
两个 , 一个是‘ss’,另一个是’ss‘的引用地址 即str

在Java语言中 String str=new String("a") 这个语句创建了几个...
在Java语言中 String str=new String("a") 这个语句创建了几个对象。 答案是:2个对象解释:该语句在进行String类的构造函数调用时引用的参数"a"时,查询内存中有无该对象,若无则创建一个"a"对象,再将该对象的地址引用传递给对象Str,存于栈中,所以说... 答案是:2个对象解释:该语句在进行String类的构造函数...

String str=new String(“abc”+”def”) 总共创建了几个对象
4 个,在java中碰到双引号就会创建对象(双引号里内容不同的话),所以abc 、def分别都会创建对象,同时java的字符串是只读的,所以abc+def后又会生成一个新的对象(原来的对象还在内存里),在使用new操作符时又会自动创建新对象,所以共计4个。

String str=new String("abc");创建了几个对象
这里产生了两个对象,引用对象S和对象空间名字为String的对象.因为new就是产生一个String的对象空间.值为字符串"abc",S是指向这个对象空间的引用(也就是引用对象).

java中String到底创建了几个对象
1. 2个 2.由于new String("aaa")相当于"aaa"与一个就是创建出来的放在堆时原实例对象,而另一个就是放在常量池中的 "aaa" 对象,当然这里的str本身只是一个引用,放在栈里,用来指向堆中创建出来的对象。常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数...

String str = new String("abc");创建了几个String对象?
当然是2个.等价于:String s = "abc";String str = new String();str = s;所以str和s是两个对象。只不过他隐藏了而已

java中 String str=new String("lujianyu");\/\/创建了几个对象,内存怎么...
2个对象,指向同一个地址 追问: String a=''lujianyu"; String b="lujianyu"; \/\/内存中 存储 一个lujianyu;a和b同时指向这个lujianyu? 回答: 是的''lujianyu"是常量 追问: 这两句并没有使用new 那是不是不会开辟内存来 存储 lujianyu? 回答: 当然会 存储 了 ...

String str=new String("abc");这条语句创建了几个对象,分别存在什么...
两个对象,一个是“abc”,一个是指向“abc”的引用对象,str是存放在栈中的指针,其值“abc”在堆中!String("abc")中的"abc"在栈中(也就是在str的下方!)也就是str和String("abc")中的"abc"都在栈中!而str指向的"abc"在堆中!

java中String s=new String("abc");创建了几个String对象?
两个对象,"abc"是一个,是常量字符串池中的对象,new了以后,又生成一个String类的普通对象,在堆中。故两个。str是引用数据类型变量,非对象,它指向new新创建的对象。

String s = new String("xyz");创建了几个String Object? 二者之间有...
java里对象传递的时候,传递的都是引用(也就是对象的地址),这比传递整个对象高效的多。而基础类型,int,double等传递的才是值。比如,(new ArrayList<String>).add(new String("hello")),jvm只是把new String("hello")的地址存入到了列表list里面。String str = new String("Test"),是开辟...

java中String new和直接赋值的区别
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").String 有一个intern() 方法,native,...

相似回答