Java中不能简单的用==、!=等比较符对两个对象进行比较,尽管有时候两个对象的内容完全一样,但是对象的引用却是不一样的!因此,对两个对象的实际内容进行比较时,必须使用所有对象都适用的特殊方法equals()。 看下面一个例子:
public class EqualsMethod{ public static void main(String[] strs){ Integer n1 = new Integer(47); Integer n2 = new Integer(47); //不能直接将两个引用比较,输出false System.out.println(n1==n2); //用特殊方法equals(),比较两个对象的实际内容,输出true System.out.println(n1.equals(n2)); int n3 = 47; int n4 = 47; //基本类型比较,可直接用比较符即可,输出true System.out.println(n3==n4); } }
equals()方法不适用于“基本类型”,基本类型直接使用==和!=即可,这点从上例中也可以看出来。
但是,事情并不是这么简单,对于我们自己创建的类,equals()默认比较两个对象的引用,如下例:
class Value{ int i; } public class EqualsMethod{ public static void main(String[] strs){ Value n1 = new Value(); Value n2 = new Value(); n1.i = n2.i = 100; //对于自己创建的类,用equals(),默认比较两个对象的引用,输出false System.out.println(n1.equals(n2)); } }
相关推荐
3. **对象等价性**:在Java中,对象等价性分为两种:引用等价性和逻辑等价性。引用等价性是指两个对象是否指向内存中的同一个位置,即它们的引用是否相同。而逻辑等价性关注的是对象的内容是否相同,即使它们在内存...
本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...
Java泛型是自JDK 5.0引入的一项重要特性,极大地增强了代码的类型安全性和重用性。本文将深入探讨Java泛型的概念、使用方式以及等价的非泛型实现,帮助读者全面理解这一强大的工具。 首先,泛型允许在类、接口和...
Java 中 instanceof 与 Class 的等价性代码示例 Java 中的 `instanceof` 运算符是一个二元操作符,用于检查对象是否属于某个特定类或其子类。它返回一个布尔值,指示对象是否是该类或其子类的一个实例。在 Java 中...
Java是一种广泛使用的编程语言,它的灵活性和跨平台性使其在处理文本转换任务时也非常得心应手。在“java中文繁体转中文简体”这个主题中,我们主要讨论的是如何利用Java技术来实现中文繁体字到简体字的转换。 首先...
3.5.1 一元加、减操作符 3.6 自动递增和递减 3.7 关系操作符 3.7.1 测试对象的等价性 3.8 逻辑操作符 3.8.1 短路 3.9 直接常量 3.9.1 指数记数法 3.10 按位操作符 3.11 移位操作符 3.12 三元操作符 if-else 3.13 ...
- 静态工厂方法允许实现实例控制类,保证类是单例的,不可实例化的,或者确保不可变类中等价对象的唯一性。这可以减少实例化的次数,避免创建不必要的重复对象。 - 静态工厂方法可以返回任何子类型的对象,提供更大...
6. **函数调用和库集成**:如果C++代码使用了库,工具可能需要处理库的迁移问题,或者提供Java的等价实现。 标签“java C++ C++转java”表明这个话题是关于这两门语言之间的互操作性。C++到Java的转换可能涉及Java ...
- **对象等价性与比较**: - `equals` 方法的理解与实现。 - `Comparable` 接口的使用。 - `hashCode` 方法的作用及其与`equals`方法的关系。 - **工具类**: - 静态类与非静态类的区别。 - 泛型的使用,包括泛型...
接着,它将这些结构映射到相应的Java语法,例如,将C中的指针转换为Java的对象引用,将C的结构体转换为Java的类,将C的函数转换为Java的方法等。在这个过程中,工具还需要处理类型映射、内存管理等方面的差异,确保...
String类在Java中是final的,这意味着它不能被继承,保证了其安全性和不变性。 首先,我们来看看标题中提到的有趣问题:`String str=new String("abc");` 这行代码会创建几个String对象。答案是两个。`"abc"`在Java...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct...
在Effective Java中,作者可能会讨论最佳实践的重要性,以及遵循这些实践如何提升代码质量。 ### 第二章 创建和销毁对象 这一章深入探讨了对象的生命周期管理,包括: 1. **静态工厂方法**:相比构造器,静态工厂...
转换器可能会尽可能保留原始代码的逻辑,但无法保证完全的等价性,因此人工审查和修改通常是必要的。同时,理解源代码的结构和目的对于成功转换至关重要。 总的来说,这三种转换反映了跨语言编程的挑战和需求。虽然...
的前20项和,展示了两种不同类型的循环在解决相同问题时的等价性。最后,通过查找完数(因子和等于自身的数)展示了条件判断和循环在数值分析中的应用。 实验三则涉及素数计算和字符串操作。首先,计算10000以内...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...
- **2.2.1 保存在什么地方**:Java对象存储在堆内存中。堆是Java虚拟机(JVM)管理的一部分内存区域,用于存放所有的Java对象实例。 - **2.2.2 特殊情况:主类型**:Java中的一些基本数据类型(如int、double等)不...
Java中的static关键字和C++中的含义相似,但Java中的static成员属于类本身而非对象实例。Java的类的Persistence是指类加载机制,它负责加载类到内存,执行类的静态初始化。Java程序的可移植性来自于它的字节码可以在...
A.1.3 传递和使用Java对象 A.1.4 JNI和Java违例 A.1.5 JNI和线程处理 A.1.6 使用现成代码 A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 ...