一个面试题:String s = new String("xyz");创建了几个String Object? 一个java面试题:String s = new String("xyz");创建了几个String Object?请高手指点一二 ......谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1个类型变量 + 1个String Object 两new的时候一个,还有一个s ……仔细想了一下,中套了应该是1个类型变量s,作为一个引用2个String Object, xyz编译的时候就存在于常量池,另一个new的时候产生 1个类型变量 + 1个String Object 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s da11393(String[] args)的第二次回答是对的。第一个对象是字符串常量"xyz"第二个对象是new String("xyz")的时候产生的,在heap中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz"另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存。 两个! "xyz"作为一个常量字符串首先被创建,它被保存在“串池”中。所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在"xyz"这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。 当然,使用new String也创建了一个对象,"xyz"作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的"xyz"内容一致! 准确的说法,应该是:类载入并初始化的时候,产生一个"xyz"的字符串对象存于常量池中代码运行到这一行的时候,又产生了一个字符串,存于堆中,是常量池中"xyz"字符串的拷贝 如果字符串常量"xyz"已经存在,难道字符串常量池中还会再创建字符串"xyz"吗?是不会的!编译器会自动优化处理。所以如果字符串常量"xyz"已经存在,只有new的时候才会创建一个对象否则,才是两个对象!! 两个,一个是"xyz",还有一个是new 出来的string object 创建了一个变量s(不是对象),它引用对象new String("xyz").其中"xyz"本身也是一个对象,因为编译器为它遇到的每个字符串直接值自动创建一个String对象,例如int len = "Hello World".length(),所以说总共创建了两个String Object. 2个对象。分别为:s , xyz3个内在块。s一块,xyz一块,xyz存在字符池也有一块! 创建了一个变量s(不是对象),它引用对象new String("xyz").其中"xyz"本身也是一个对象,因为编译器为它遇到的每个字符串直接值自动创建一个String对象,例如int len = "Hello World".length(),所以说总共创建了两个String Object. 两个一个在heap中,一个在String常量池 两个,一个“xyz”,一个是指向“xyz”的引用。 String s = new String("xyz");创建了几个String Object?申明了一个对象a,并给他一个值为"xyz" 把mocoffee的回答好好看看,讲的太好了顶他String s = new String("xyz");语句相当于 String s1="xyz"; String s=new String(s1);结合mocoffee的讲解应该没问题了 很老的题目了,zzmsl(周先生) ( ) 创建了一个变量s(不是对象),它引用对象new String("xyz").其中"xyz"本身也是一个对象,因为编译器为它遇到的每个字符串直接值自动创建一个String对象,例如int len = "Hello World".length(),所以说总共创建了两个String Object.这个是正解。做过C++的话就不会有这个疑惑了 为什么不象其他的样,在栈上创建个变量S,然后在堆创建个对象"xyz",然后S指向这个对象,这样不是很简单吗?非要搞得那么复杂作什么呢,想不通为什么字符串要这样做. 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 一家之见 应该是3个2个对象。分别为:s , xyz3个内在块。s一块,xyz一块,xyz存在字符池也有一块! 其实在ECLIPSE 里面可以用DEBUG去看看 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象。 创建了一个String Object,一个引用 看看thinking in java是一个string objects是引用 很简单,用System.out.println(s=="xyz")测试一下就知道是不是同一个对象了!!!实际上是:s!="xyz",也就是说,不是一个对象,在这个过程中至少是创建了两个对象:首先:创建一个"xyz"的String对象然后,以这个对象为参数,创建另一个String对象!!!这句话相当于:String a="xyz";String s=new String(a); 3个撒一个是"xyz"本身,第二个是通过new创建出来的String 类型的对象。第三个是s,它是第二个对象的引用,也是String类型。 两个 《thinking in java》第一章说得最详细出题的人可能就那本书看来的 这种问题和实际开发根本挂不上,还不如这样问,一般new String()是什么情况下使用?一般是字符集转换.比如new String(s,"GBK","ISO-8859-1") 说s的都是错的,看看 Effective Java 就知道了。 这是问得最多的问题吧,估计也是考得很多的一个问题.呵呵!lz可以看看这个贴,http://community.csdn.net/Expert/topic/5283/5283590.xml?temp=.7259638精华贴.! 是两个String Object 先声明一下s不是对象只不过是一个引用在“xyz”的时候创建了一个String Object在new String(“xyz”)的时候又创建了一个String Object想一想我们经常这样写 String str=“xyz”;str是一个引用,而“xyz”这样的语法就能创建一个String对象,会在内存中开辟一块空间来存放“xyz”String str1=new String(“xyz”)是根据“xyz”创建一个String对象(注意是从新开辟一块内存,内存中存放的同样是“xyz”)并且让引用str1指向这新的内存综上所述在你的程序中创建了两个String Object 和一个引用 中计了, s = "xyz" 和 s = new String("xyz") 就不是一回事 我赞成66楼的说法:但如果是这样的话:是不是在堆中就会有两个“xyz”呀……? 15楼回答不错,有可能创建一个,有可能创建两个。如果JAVA字符串池中存在xyz就不会再创建一个,JAVA会自动取常量池中的字符串。但new的时候会创建一个。所以大家要明白一个问题class A{ public String s = "xyz";}class B{ public String y = "xyz";}那么A中的s 能不能用 == B中的y呢?答案是true.OK。 两个! "xyz "作为一个常量字符串首先被创建,它被保存在“串池”中。所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在 "xyz "这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。 当然,使用new String也创建了一个对象, "xyz "作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的 "xyz "内容一致! 两个,一个是s,另一个是new出来的string object。 有关java.lang.ClassNotFoundException和Class not found的疑问 java继承的问题 Can recommend a better java compression library? 有没有人会使用java和matlab结合啊 装了myeclipse后不能编译jsp文件~~~~~~~~~~~~~~~~~~ 什么是erp mis 开学想去报个班 请大家帮我看看 我记录下来了! 高人指点一下 再问 J2SE1.4中针对ZIP开发的问题! JavaFx 怎么从一个窗口打开另一个新窗口 java 格式控制符 Re: 一著名软件公司的java笔试算法题!
new的时候一个,还有一个s
第一个对象是字符串常量"xyz"
第二个对象是new String("xyz")的时候产生的,在heap中分配内存给这个对象,只不过这个对象的内容是指向字符串常量"xyz"
另外还有一个引用s,指向第二个对象。这是一个变量,在栈中分配内存。
"xyz"作为一个常量字符串首先被创建,它被保存在“串池”中。所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在"xyz"这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。
当然,使用new String也创建了一个对象,"xyz"作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的"xyz"内容一致!
代码运行到这一行的时候,又产生了一个字符串,存于堆中,是常量池中"xyz"字符串的拷贝
是不会的!编译器会自动优化处理。
所以如果字符串常量"xyz"已经存在,只有new的时候才会创建一个对象
否则,才是两个对象!!
3个内在块。s一块,xyz一块,xyz存在字符池也有一块!
申明了一个对象a,并给他一个值为"xyz"
顶他
String s = new String("xyz");语句相当于
String s1="xyz";
String s=new String(s1);
结合mocoffee的讲解应该没问题了
zzmsl(周先生) ( )
创建了一个变量s(不是对象),它引用对象new String("xyz").其中"xyz"本身也是一个对象,因为编译器为它遇到的每个字符串直接值自动创建一个String对象,例如int len = "Hello World".length(),所以说总共创建了两个String Object.
这个是正解。做过C++的话就不会有这个疑惑了
一家之见
2个对象。分别为:s , xyz
3个内在块。s一块,xyz一块,xyz存在字符池也有一块!
是一个string object
s是引用
首先:创建一个"xyz"的String对象
然后,以这个对象为参数,创建另一个String对象!!!这句话相当于:
String a="xyz";
String s=new String(a);
第二个是通过new创建出来的String 类型的对象。
第三个是s,它是第二个对象的引用,也是String类型。
出题的人可能就那本书看来的
http://community.csdn.net/Expert/topic/5283/5283590.xml?temp=.7259638
精华贴.!
在“xyz”的时候创建了一个String Object
在new String(“xyz”)的时候又创建了一个String Object
想一想我们经常这样写 String str=“xyz”;str是一个引用,而“xyz”这样的语法就能创建一个String对象,会在内存中开辟一块空间来存放“xyz”String str1=new String(“xyz”)是根据“xyz”创建一个String对象(注意是从新开辟一块内存,内存中存放的同样是“xyz”)并且让引用str1指向这新的内存综上所述在你的程序中创建了两个String Object 和一个引用
但如果是这样的话:
是不是在堆中就会有两个“xyz”呀……?
有可能创建一个,有可能创建两个。
如果JAVA字符串池中存在xyz就不会再创建一个,JAVA会自动取常量池中的字符串。
但new的时候会创建一个。
所以大家要明白一个问题
class A
{
public String s = "xyz";
}class B
{
public String y = "xyz";
}那么A中的s 能不能用 == B中的y呢?
答案是true.OK。
"xyz "作为一个常量字符串首先被创建,它被保存在“串池”中。所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在 "xyz "这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。
当然,使用new String也创建了一个对象, "xyz "作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的 "xyz "内容一致!