A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴亨 黑马帝   /  2012-2-16 13:27  /  2250 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吴亨 于 2012-2-16 14:15 编辑

    什么时候有哪一个呢?

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 丁晓宇 于 2012-2-16 13:39 编辑

比较字节码的时候用==啊,equals()是用来比较值的
比如
String str1 = "abc";
String str2 = "abc";
用== 比较返回值就是false 他们是不同的对象字节码不同
用equals()返回就是true

-----------------------------
楼下兄台说的对
new的方式产生String对象才会创建两个对象
而我上面写的方式是一个对象两个引用,{:soso_e153:} ,偶的基础还不是很扎实,差点误导楼主了

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1 态度很认真

查看全部评分

回复 使用道具 举报
==和equals是不等价的
指示其他某个对象是否与此对象“相等”。
对于字符串的创建比较特殊,因为字符串还有一个字符串池的概念:
String str1="abc";
String str2="abc";
System.out.println(str1==str2);//此时会返回true
另外一种写法是:
String str1=new String("abc");
String str2=new String("abc");
System.out.println(str1==str2);//此时会返回false
这就是字符串池的知识了,如果是原始类型的话,其实用==和用equals基本上都等得到同样的结果,
建议判断两个引用类型的话,最好用equals方法。
equals 方法在非空对象引用上实现相等关系: (以下是equals方法在javaSE中的原话)

自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

评分

参与人数 1技术分 +1 收起 理由
荣凯旋 + 1

查看全部评分

回复 使用道具 举报
奥,谢谢。
回复 使用道具 举报
==比较的对象在内存中的地址值。Ojbect类中的equals方法内部也是用了==。String类中的equals方法复写了Object类中的方法,只比较字符串的内容,不比较地址值了。还有Integer这些包装类也是这样。这些要靠你自己积累了。
基本数据类型使用“==”来比较,引用数据类型用“==”比较是否同一个对象,equals()方法用来比较内容是否一致。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王康 于 2012-2-17 10:36 编辑

public class StringAPIDemo {
          public static void main(String[] args)
      {
              String str1="hello";        //String类型变量
              char c[]=str1.toCharArray();        //把字符串转换成字符数组
              for (int i=0;i<c.length ; i++)
              {
                      System.out.print(c+"\t");        //\t为制表符  h        e        l        l        o        
              }
              System.out.println("");        //换行
              String str2=new String(c);        //把数组转换成字符串
              String str3=new String(c,0,3);        //截取字符串str2,从下标0开始,截取3个字符长度的字符.
              System.out.println(str2);        //        hello
              System.out.println(str3);        //  hel
      }
}

java中的数据类型,可分为两类:
1.基本数据类型,也称原始数据类型。byte,short,char,int,long,float,double,boolean
  他们之间的比较,应用双等号(==),比较的是他们的值。
2.复合数据类型(类)
  对于复合数据类型之间进行equals比较,在没有覆写equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的,因为Object的equals方法也是用双等号(==)进行比较的,所以比较后的结果跟双等号(==)的结果相同。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
==是用比较变量所存储内容的内存地址是否相等
equals方法是对于对象才有的方法,所以我们要根据自己的需求
回复 使用道具 举报
靖美专 黑马帝 2012-2-20 13:39:41
8#
== 比较的是不是指向同一个地址
equals 比较的是内容是否相同
比如 String s1=“this”; String s2=“this”;  String s3=s1;
   这时候 s1==s2        false 因为不是同一个对象,指向不同的地址
          s1.equals(s2)      true 内容相同
                  s1==s3      true 指向同一个对象

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
对于字符串变量来说,使用equals()和==是有区别的,==是比较两个变量本身的值,就是他们在内存中的首地址,而equals()比较字符串的内容,对于非字符串来说equals()与==没区别,都是比较在内存中的首地址。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马