为什么两个输出不一样。第一个是true,第二个是false,我当时以为第二个也是true。

就在附近 2013-03-23 09:10:25
class Value {
int i;
}

public class Equalment {
public static void main(String[] args) {
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);

Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;

System.out.println(n1.equals(n2));
System.out.println(v1.equals(v2));
}
}
...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
Iteger类中的equals方法是比较两个值是不是相同,而你自己定义的Value类的没有重写该方法,所以该方法继承了Object类的equals方法是比较两个对象的地址的。重写就是在该类中重新定义该方法的实现,你可以在你的Value类中如下定义 public boolean equals(Object obj) { if (obj instanceof Value) { return i == ((Value)obj).i; } return false; }你的结果将返回true了,可以把代码贴过去试试!
LCore 2013-03-23
  • 打赏
  • 举报
回复
自己去下一个API文档吧,直接查看Integer的equals方法就行了 Integer的equals方法是这样的 private final int value; public Integer(int value) { this.value = value; } public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }这是sun帮写好了......
就在附近 2013-03-23
  • 打赏
  • 举报
回复
引用 2 楼 yanxing2012 的回复:
equals()是object的一个方法,用来比较两个对象的地址,但string和Integer重写了这个方法,所以这两个类的equals()方法是比较的两个对象的内容,至于其他的类,只要没重写equals方法的肯定还是继承的object类里的equals方法,那就是比较地址,即使对象内容一样,返回的还是false,默认的equals 是比较引用的,即比较对象的内存地址只……
上面的 Integer重写了equals(),怎么看?
就在附近 2013-03-23
  • 打赏
  • 举报
回复
引用 1 楼 kiritor 的回复:
引用 楼主 wjc19910312 的回复:class Value { int i; } public class Equalment { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer……
那要如何重写,什么时候要重写
就在附近 2013-03-23
  • 打赏
  • 举报
回复
那要如何重写,什么时候要重写
yanxing2012 2013-03-23
  • 打赏
  • 举报
回复
equals()是object的一个方法,用来比较两个对象的地址,但string和Integer重写了这个方法,所以这两个类的equals()方法是比较的两个对象的内容,至于其他的类,只要没重写equals方法的肯定还是继承的object类里的equals方法,那就是比较地址,即使对象内容一样,返回的还是false,默认的equals 是比较引用的,即比较对象的内存地址只有这样才能相等 。   ==用于比较引用和比较基本数据类型时具有不同的功能:比较基本数据类型,如果两个值相同,则结果为true, 而在比较引用时,如果引用指向内存中的同一对象,结果为true
LCore 2013-03-23
  • 打赏
  • 举报
回复
引用 楼主 wjc19910312 的回复:
class Value { int i; } public class Equalment { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); Value……
楼主需要明白equals()方法 第二个由于你没有重写equals()方法 v1.equals(v2)就相当于v1==v2但是 v1和v2不相等,所以为false了
已经博主授权,源码转载自 https://pan.quark.cn/s/6cfea8426862 内存辅助教程是一项专为初学者设计的课程,其目的是协助那些对计算机内存管理缺乏了解的学员构建起必要的基础知识。内存管理是计算机科学中的一个核心概念,对于深入理解和优化程序运行表现具有决定性作用。在此教程中,我们将系统性地研究内存的运行原理,探讨内存的分配与释放方法,以及借助内存辅助工具来增强程序运行效率。我们需要明确内存的定义。内存,亦称为RAM(随机存取存储器),是计算机用于临时存储数据与程序的关键组件。当CPU执行工作负载时,它必须迅速获取这些信息,而内存正是提供这种快速存取途径的设施。内存的存储容量及其传输速度直接决定了计算机处理数据的效率。在编程领域,内存管理主要包含两大方面:内存的分配与内存的释放。内存分配指的是为变量或数据结构在内存中预留空间的过程,而内存释放则是将已不再被使用的内存空间归还给操作系统,以此来防止内存资源的泄漏。不当的内存管理可能引发程序运行中断或性能降低的问题。本教程或许会涉及以下几个关键的学习要点:1. **内存种类**:熟悉不同种类的内存,例如栈内存、堆内存以及静态内存各自的特性。栈内存主要用于存放自动变量,其管理由编译器自动完成;堆内存则要求程序员自行进行分配和释放操作;静态内存是在程序编译阶段就已经被分配好的。2. **内存的分配与释放**:掌握运用C++中的`new`与`delete`,或是C语言中的`malloc`和`free`来实现动态内存的分配和释放。同时,需理解内存泄漏的概念及其可能带来的风险。3. **内存辅助工具**:介绍用于内存调试的实用工具,比如Valgrind,它能够帮助检测内存泄漏、未初始化的内存访问等异常情况,以及性...
源码链接: https://pan.quark.cn/s/3b3d90c82d79 Markdown是一种简便易用的标记语言,适用于编写文档、博客以及笔记等内容,其语法设计精简且直观,能够将普通文本转化为格式化的HTML(超文本标记语言)文档。CSDN的Markdown编辑器为用户呈现了一个友好且功能完备的写作环境,特别适合初学者进行学习。### Markdown基础语法1. **标题**:通过在文本行首加入#号来设定标题,#号的个数决定了标题的层级,最高可支持六级标题。2. **强调**:利用*或_将文本包裹起来实现斜体显示,而两个*或_则用于表示加粗效果。3. **标记**:使用==包围文本能够实现高亮显示,而~~包裹文本则用于添加删除线。4. **引用**:以>开头的行表示引用内容。5. **代码**:单个反引号`包围的文本表示内联代码,而三个反引号```则用于包裹代码块。6. **链接**:行内式链接的语法结构为\[显示文本\](链接地址),图片链接类似,但需在方括号前加上!符号。7. **列表**:通过-或*创建无序列表,而数字后跟句点可用于构建有序列表,在后面添加空格即可输入列表项内容。8. **检查列表**:- [ ] 代表未完成的任务,- [x] 代表已完成的任务。### CSDN Markdown编辑器增强功能1. **新界面设计**:提供了更为现代化且用户友好的写作界面,从而提升了整体用户体验。2. **代码高亮**:用户可以在创作中心个性化设置代码高亮样式,使得代码片段更加清晰易读。3. **图片拖拽**:支持直接将本地图片拖入编辑区域,简化了图片的插入流程。4. **KaTeX数学公式**:支持LaTeX语法,方便用户撰写包含数学公式...

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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