0 0

求解惑java强转类型问题5

class SetType{
      int i;
      public SetType(int n){i=n}
      public boolean equals(Object o){
         return o instanceof SetType && (i==((SetType)o).i);
      }
}
在return 语句中((SetType)o).i为什么通过这样的类型转化才能够引用i?
2012年8月20日 22:43

4个答案 按时间排序 按投票排序

0 0

采纳的答案

1、首先equals方法属于java.lang.Object,子类需要覆盖该方法,按照覆盖规则,你必须public boolean equals(Object o) 按照这个格式进行覆盖;从而实现多态;

2、你的equals方法实现的不对,equals方法在覆盖时必须满足如下特性(直接引自javadoc): 自反性、对称性、传递性、一致性(幂等性):

引用
public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
equals 方法在非空对象引用上实现相等关系:

自反性:对于任何非空引用值 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)。

注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。


3、实现:
public boolean equals(Object o){ 
     if(this == o) {  //一致性 自己和自己比较为true
              return true;
     }
     if(o == null) {//对于任何非空引用值 x,x.equals(null) 都应返回 false。 
             return false;
     }
     if(!(o instanceof SetType)) { //类型不兼容 直接返回false
          return false;
     }
     SetType st = (SetType)o; // 把o(Object类型)强制造型为SetType类型,否则获取不到SetType中的成员(Object是所有类型的父类型、提供了几个共性方法(如toString、equals、hashCode) 为所有对象继承 可以参考jdk文档);

     if(this.i == st.i) {
            return true;
     }
     return false;
} 


4、可以自己测试自反性、对称性、传递性、一致性。

2012年8月21日 06:02
0 0

因为在这个创建下 i是SetType才有的

2012年8月21日 19:56
0 0

o是Object类型,需要调用的i在SetType里面。所以必须要转换后才能调用i。

2012年8月21日 09:48
0 0

在return 语句中((SetType)o).i为什么通过这样的类型转化才能够引用i?
答:首先,o是参数变量,类型为Object,没有i的属性。其次这个equals方法是比较SetType的i属性,而equals方法覆盖父类Ojbect的equals方法,参数固定为Object类型。

2012年8月20日 23:33

相关推荐

    java 解惑 java 解惑 java 解惑

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    JAVA 解惑 java经典

    "JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...

    Java解惑(中文版)_java_java解惑_solve65p_

    通过《Java解惑》这本书,初学者不仅可以系统地学习Java语言,还能获得解决实际问题的技巧,从而更好地适应编程环境并提升编程能力。书中的65个问题或主题涵盖了上述各个知识点,确保读者在学习过程中能够逐步建立起...

    Java PUZZLE Java 解惑

    Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑

    Java解惑.pdf

    这份“Java解惑.pdf”文档很可能包含了解决Java开发者在编程过程中遇到的常见问题和困惑的详细解答。以下是可能涵盖的一些Java相关知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制...

    Java解惑 中文版

    《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...

    java解惑 PDF版

    综上所述,文档《java解惑 PDF版》的这部分内容涵盖了在Java中处理取余、奇偶判断和浮点数精度问题时需要考虑的诸多细节。开发者在进行编程时应当特别注意这些细节,避免走入常见的陷阱。在处理涉及精度的计算时,...

    Java解惑 java

    Java解惑 Java解惑 Java解惑

    java解惑java解惑java解惑

    "Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...

    JAVA解惑.pdf

    《JAVA解惑》这本书主要针对Java编程中遇到的各种常见问题和困惑进行了解答,旨在帮助开发者深入理解Java语言,提高编程技巧。以下是一些关键的知识点解析: 1. **异常处理**:Java中的异常处理是通过try-catch-...

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    Java 解惑 Java新人学习

    Java 解惑.pdf 适合新人学习。 Java新人学习

    java疑难问题解惑

    本篇文章将详细解析Java中的几个典型问题,包括自增运算符的用法、字符类型相加以及窄数字类型的提升规则。 一、自增运算符的理解与应用 在Java中,自增运算符(++)有两种用法:前缀形式(++i)和后缀形式(i++)...

    JAVA解惑(JAVA谜题) 中文版(PDF)

    ### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...

    4,JAVA解惑 高清PDF 下载

    《JAVA解惑》是Java开发者领域的一本经典著作,它被广大编程爱好者称为Java四大名著之一,旨在解决初学者及有一定经验的开发者在学习和使用Java过程中遇到的各种困惑。这本书深入浅出地讲解了Java语言的核心概念和...

    java解惑 for all javaer

    讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。

    java解惑(包括pdf和答案)

    "java解惑"这个主题旨在帮助初学者理解和解决在学习Java过程中遇到的问题,通过实例来深入浅出地讲解Java的基础知识,同时也强调了实用技巧和注意事项。 "Java解惑"的资料可能包含了两部分:`.chm`和`.pdf`格式的...

    JAVA面试题解惑系列合集

    《JAVA面试题解惑系列合集》这篇文章详细地讨论了Java面试中常见的一些知识点和问题。它包括了从类的初始化顺序、String对象的创建数量、变量的覆盖、final关键字、传值和传引用的区别、字符串的处理、日期和时间的...

    Java面试解惑宝典(高清PDF版)

    其次,《Java面试题解惑系列》可能包含了大量的面试真题解析,帮助读者了解面试官可能会问的问题类型,以及如何进行有效的解答。这可能包括异常处理、JVM内存模型、垃圾回收机制、反射、注解等进阶话题。例如,理解...

    Java解惑(中文).pdf

    "Java解惑(中文).pdf"这份文档很显然是为了帮助Java开发者解决他们在编程过程中遇到的一些常见困惑和误解。这份高清版、文字版的资料很可能包含了深入浅出的解释和实例分析,以中文的形式呈现,使得国内开发者更容易...

Global site tag (gtag.js) - Google Analytics