Java疑问,请赐教

//为什么以下两个程序的结果是不同的?//第一个程序classTest{publicstaticvoidmain(String[]args){Stringstr1=new... //为什么以下两个程序的结果是不同的?

//第一个程序
class Test
{
public static void main(String [] args)
{

String str1=new String("abc");
String str2=new String("abc");

if(str1 == str2)
{
System.out.println("str1==str2");
}

else
{
System.out.println("str1!=str2");
}
}
}

//第二个程序
class Test
{
public static void main(String [] args)
{

String str1 = "abc";
String str2 = "abc";

if(str1 == str2)
{
System.out.println("str1==str2");
}

else
{
System.out.println("str1!=str2");
}
}
}

//换句话说,String str1 = new String("abc"); 和 String str1 = "abc";
有什么不同?
展开
 我来答
凯司蛋23
2010-03-18
知道答主
回答量:9
采纳率:0%
帮助的人:0
展开全部
钟述林
2010-03-19 · TA获得超过462个赞
知道小有建树答主
回答量:103
采纳率:0%
帮助的人:101万
展开全部
主要的区别在于内存地址分配不一样。
String str1 = new String("abc");这句中的str1是放在一块普通的内存空间里的(分配一块新内存),跟Object obj = new Object();所分配的内存空间是差不多的,都是当作一个对象来处理的。而

String str1 = "abc";
是把str1这个变量放在一块特殊的内存中的,名叫“常量域”,它的特殊在于在常量域中不会出现相同的值,如果再有一个变量String str2 = "abc";的话,它不会再重新创建一块内存,而是直接把str2指向str1所指向的内存
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ft1226766
2010-03-19 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:93
采纳率:0%
帮助的人:123万
展开全部
简单来说,Java处理字符串时,使用字符串池来提高效率,在程序员不使用new关键字创建新的String对象时,直接从字符串池中找相同字符串的引用,如果字符串池没有相同的字符串才会重新创建一个,并一直保留等待下次引用。使用new关键字时,总是会创建新对象。

因此第一个程序显示两者不等,第二个是相等的

这里关键字是:对象池技术。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
muyejingefeng
2010-03-18 · TA获得超过348个赞
知道小有建树答主
回答量:287
采纳率:0%
帮助的人:0
展开全部
使用new String("abc")来创建一个String对象时,会有两个对象产生,一个就是"abc"字符串常量,另一个就是new String产生的对象;而直接用String str1="abc"创建的对象,直接会交"abc"的引用传给str1,所以两种方式创建String对象,第二种会更好一些。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
nanfengbobo
2010-03-18
知道答主
回答量:46
采纳率:0%
帮助的人:0
展开全部
第二个是常字符串,比较的是他们的引用值,所以第二个会显示两者不等,第一种是包装类,String重载了运算符,所以第一个显示为你预想的结果!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式