黑马程序员技术交流社区
标题:
新手请教,为什么结果会是这样
[打印本页]
作者:
范天成
时间:
2013-1-22 23:27
标题:
新手请教,为什么结果会是这样
本帖最后由 张向辉 于 2013-1-23 10:45 编辑
代码如下:
public class Test {
public static void main(String [] args)
{
String str1= new String("abc");
String str2 = new String("abc");
String str3=str1;
if(str1.equals(str2))
{
System.out.println("true");
}
else
{
System.out.println("false");
}
if(str1==str2)//此处不也是true么?
{
System.out.println("true");
}
else
{
System.out.println("false");
}
if(str1==str3)
{
System.out.println("true");
}
else
{
System.out.println("false");
}
}
}
输出结果是:true faulse true 我怎么感觉应该是true true true
作者:
低调的奢华
时间:
2013-1-22 23:36
本帖最后由 低调的奢华 于 2013-1-22 23:39 编辑
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。
“==”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。
比如:
s1 = new String("abc");
s2 = new String("abc");
那么:
s1==s2 是 false //两个变量的内存地址不一样,也就是说它们指向的对象不 一样,故不相等。
s1.equals(s2) 是 true //两个变量的所包含的内容是abc,故相等。
所以,你懂的!
作者:
贾文泽
时间:
2013-1-22 23:43
String str1= new String("abc");
String str2 = new String("abc");
这种方式每次都会在堆中创建一个新的对象,str1跟str2分别指向各自创建的对象,自然返回是false
作者:
黄金龙
时间:
2013-1-22 23:54
public class Test {
public static void main(String [] args)
{
String str1= new String("abc"); //这里创建一个对象就会有一个地址值.....
String str2 = new String("abc"); //这里再创建一个对象就是一个新的地址值...2个地址值都是不相同的..
String str3=str1;
if(str1.equals(str2))
{
System.out.println("true");
}
else
{
System.out.println("false");
}
if(str1==str2)//此处不也是true么?
{
System.out.println("true");
}
else
{
System.out.println("false");
}
if(str1==str3)
{
System.out.println("true");
}
else
{
System.out.println("false");
}
}
复制代码
作者:
舒远
时间:
2013-1-23 09:01
论坛充斥着这种==和equals的区别的帖子。。你有搜过再发帖么?
作者:
Just_Only
时间:
2013-1-23 09:49
同意上面版主的看法,什么问题不要开始就发帖问,首先得自己找找看下有没有类似的问题,如果木有在发帖询问。
作者:
逍林游
时间:
2013-1-23 10:14
首先你必须明白obj1.equals(obj2)方法与“obj1==obj2”的区别:obj1.equals(obj2)方法比较的是obj1和obj2中的内容是否相等;“obj1==obj2”是进行obj1和obj2内存中的首地址的比较。
明白这点,再来看String str1= new String("abc"); //使用new表示在内存中重新为str1分配内存地址
String str2 = new String("abc"); //使用new表示在内存中重新为str2分配内存地址 ,尽管str1和str2内容相同
String str3=str1; //将str3指向str1的内存地址
综上所述:str1.equals(str2)结果为:true;str1==str2结果为:false;str1==str3结果为:true。
ok了!
作者:
高浩
时间:
2013-1-23 15:42
字符串比较特殊,它定义有不同的方式:
第一种:
String str1="abc1";
第二种:
String str1=new String("abc1");
第一种创建后在字符串常量池会有记录,当在创建了相同的字符串时,会去直接指向已有字符串地址
第二种则是,在次基础上并开辟了新空间
还有==是基本数据类型进行比较使用的,然而用在引用数据类型上则是比较地址,不是比较内容
如果想要比较内容时,要用到equals方法,这才是比较内容。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2