黑马程序员技术交流社区

标题: 判断相当的用法? [打印本页]

作者: tpsu88    时间: 2013-6-27 17:09
标题: 判断相当的用法?
本帖最后由 孙百鑫 于 2013-6-28 10:04 编辑

大家总结说说,“==”        “equals”         "instanceof"         "contains"   的不同?比如用法?和什么时候用?
少了可以补充!!!


作者: 梦想蓝色天空    时间: 2013-6-27 18:16
个人理解  ==是判断两个对象是否相等或两个值是相等 比如int值 boolean值等(不包含字符串)  
equals 用来判断两个字符串的值是否相等
instanceof用来判断是否引用同一对象
比如:
 public class Bill {//省略细节}
  public class PhoneBill extends Bill {//省略细节}
  public class GasBill extends Bill {//省略细节}

  在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:

  public double calculate(Bill bill) {
  if (bill instanceof PhoneBill) {
  //计算电话账单
  }
  if (bill instanceof GasBill) {
  //计算燃气账单
  }
而 contains是判断是否包含一个值..比如说一个字符串
String info="abc";  info.constains("a")。则返回值为true;


作者: 万琪    时间: 2013-6-27 19:22
“==”       地址值相等
“equals”         数值相等
"instanceof"        对象关系
"contains"    string特有关系

楼主问题总结的不错,,应该还有很多特有比较方法,,可以完善

作者: 280270738    时间: 2013-6-27 20:00
==就是判断左右两边是否相等
equals方法很多类里面都复写了,所以在用equals方法前应明确是什么对象在调用。
instanceof判断对象是否属于那个类。
contains 包含关系主要用于字符串
作者: tpsu88    时间: 2013-6-28 11:35
补充!!  compareTo  也是比较
作者: gzbbxu    时间: 2013-6-28 11:55
对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

“==”比较两个变量本身的值,即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同。

但是有一点值得注意的是,String str1="abc"; Strng str2="abc";

str1和str2是两个字符串常量所生成的变量,其中所存放的内存地址是相等的。

所以str1==str2是true;

而对于非字符串变量来说,“==”和“equals”方法的作用是相同的都是用来比较其对象在堆内存的首地

址,即用来比较两个引用变量是否指向同一个对象。

Object 类的 equals() 方法的比较规则为:当参数 obj 引用的对象与当前对象为同一个对象时,就返回

true,否则返回false

在JDK中有一些类覆盖了 Object 类的equals()方法,它们的比较规则为:

如果两个对象的类型一致,并且内容一致,则返回true。

而instanceof操作符用于判断一个引用类型所引用的对象是否是一个类的实例

instanceof 左边操作元被显式声明的类型与右边操作元必须是同种类或者有继承关系,即位于继承树的同

一个继承分支上,否则编译出错

而Containes(CharSequence s)方法是字符串的比较方法,当且仅当此字符串包含char 值的指定序列时返

回true。

作者: gzbbxu    时间: 2013-6-28 12:03
补充: compareTo(T t)  较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2