
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";
有什么不同? 展开
//第一个程序
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";
有什么不同? 展开
展开全部
主要的区别在于内存地址分配不一样。
String str1 = new String("abc");这句中的str1是放在一块普通的内存空间里的(分配一块新内存),跟Object obj = new Object();所分配的内存空间是差不多的,都是当作一个对象来处理的。而
String str1 = "abc";
是把str1这个变量放在一块特殊的内存中的,名叫“常量域”,它的特殊在于在常量域中不会出现相同的值,如果再有一个变量String str2 = "abc";的话,它不会再重新创建一块内存,而是直接把str2指向str1所指向的内存
String str1 = new String("abc");这句中的str1是放在一块普通的内存空间里的(分配一块新内存),跟Object obj = new Object();所分配的内存空间是差不多的,都是当作一个对象来处理的。而
String str1 = "abc";
是把str1这个变量放在一块特殊的内存中的,名叫“常量域”,它的特殊在于在常量域中不会出现相同的值,如果再有一个变量String str2 = "abc";的话,它不会再重新创建一块内存,而是直接把str2指向str1所指向的内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
简单来说,Java处理字符串时,使用字符串池来提高效率,在程序员不使用new关键字创建新的String对象时,直接从字符串池中找相同字符串的引用,如果字符串池没有相同的字符串才会重新创建一个,并一直保留等待下次引用。使用new关键字时,总是会创建新对象。
因此第一个程序显示两者不等,第二个是相等的
这里关键字是:对象池技术。
因此第一个程序显示两者不等,第二个是相等的
这里关键字是:对象池技术。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用new String("abc")来创建一个String对象时,会有两个对象产生,一个就是"abc"字符串常量,另一个就是new String产生的对象;而直接用String str1="abc"创建的对象,直接会交"abc"的引用传给str1,所以两种方式创建String对象,第二种会更好一些。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第二个是常字符串,比较的是他们的引用值,所以第二个会显示两者不等,第一种是包装类,String重载了运算符,所以第一个显示为你预想的结果!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询