输出结果为什么是这个

Luger 2011-03-01 10:48:02
//==和equal()方法的区别
/*输出结果
* str.equals(str1)true
str.equals(str2)true
str1.equals(str2)true
false
false
false
*/
public class Test1 {
public static void main(String args[]) {
String str = new String("i like java");
String str1 = new String("i like java");
String str2 = "i like java";
String str3 = "i like java";

System.out.println("str.equals(str1)"+str.equals(str1));
System.out.println("str.equals(str2)"+str.equals(str2));
System.out.println("str1.equals(str2)"+str1.equals(str2));
System.out.println("str==str1)"+str1 == str);
System.out.println("str1==str2)"+str1 == str2);
System.out.println("str3==str2)"+str3 == str2);

}
}
...全文
108 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Java中,“==”的语义是固定的,就是比较变量的“值(value)”
int i = 1;
int j = 1;
i == j 为true,因为值相同。

Integer i = new Integer(1);
Integer j = new Integer(1);
i == j 为false,因为i和j的值不同。

所需要区分的是,基本类型变量的值和引用类型变量的值是什么含义。认识到引用变量的值和对象的不同,也就理解了。


或许这里讲的更详细一点

http://wenku.baidu.com/view/2d25e10d4a7302768e9939d7.html

http://www.360doc.com/content/10/0829/15/2305723_49651719.shtml

http://devilcy.javaeye.com/blog/786678

希望对你有帮助
  • 打赏
  • 举报
回复
解释一下==号,他比较的是一个对象在内存中的地址值,
比如2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。

equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。

在Object类源码中是这样写的。
public boolean equals(Object obj) {
return (this == obj);
}
他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}

String里的方法,如果==号比较不相等,还会进行一下值的比较。
所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。
蛰伏神兽 2011-03-02
  • 打赏
  • 举报
回复
equals()比较的是内容
str==str1的比较,你可以看作是 str.getClass()==str1.getClass()
你自己去试试System.out.println(str.getClass());看看输出的是什么
Ganymede 2011-03-02
  • 打赏
  • 举报
回复
前三个都为true毫无疑问,楼主你后三个语句System.out.println("str==str1)"+str1 == str);
是不是应该改成System.out.println(("str==str1)"+(str1 == str))

就算面试会问到这种问题,应该也不会问到System.out.println("str==str1)"+str1 == str);这种情况吧,哈哈。如果就像楼主这样写的话 后三个也毫无疑问是false了

如果要是像我改的那样,那最后一个是true剩下两个是false
原因1楼已经说的很明白了
cuiyanlei2010 2011-03-01
  • 打赏
  • 举报
回复
上面写错了,不好意思
equals方法被String类重写了,变为比较字符串内容是否相同了,所以输出true;
cuiyanlei2010 2011-03-01
  • 打赏
  • 举报
回复
我也是新手不知道这样说对不对,望各位大侠指教
equals方法被String类重写了,变为比较字符串内容是否相同了,所以输出false;
而 == 是比较应用是否相同,当然不相同,所以输出false
hjllii 2011-03-01
  • 打赏
  • 举报
回复
因为+比==等级高,应该改为"str==str1)"+(str1 == str)
龙四 2011-03-01
  • 打赏
  • 举报
回复
又来了,神啊,救救csdn吧
awusoft 2011-03-01
  • 打赏
  • 举报
回复
String的.equals没有什么好说的,是判断"内容"是否相同的.

主要是说==
就是涉及到内存空间的问题:JVM开辟有一个叫String池的地方.

当遇到String str="123";
这样的语句的时候,是在池中创建对象的.
而String str = new String("123")是在堆中创建对象的.

str是一个地址值:
举个例子:把"这里的值"当成一种动物吧.而一个酒店就当成内存空间:


变量就是指房间号,也就是地址:

String str = new String("i like java");-->只要是new,那么它就是一个新物种,开一间正规的房间给它(A01房)
String str1 = new String("i like java"); -->与上边的同理(A02房)
String str2 = "i like java";-->这个是直接常量,就在大堂那里开一间,先看看里有没有相同的物种,没有就创建(C01房)
String str3 = "i like java";-->同上,直接常量,就在大堂那里开一间,先看看里边有没有相同的物种,这时候,发现是有的,那么就是返回同一个房间号.(C01房).

相关的==判断,就看房间号是否相同了.



62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧