本文目录一览:
java怎么比较两个对象是否相等?
一、java中的基本数据类型(int、double、short、long、byte、float、boolean、char)判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false。
二、但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2,
obj1==obj2 判断是obj1,obj2这两个引用变量是否相等,即它们所指向的对象是否为同一个对象。言外之意就是要求两个变量所指内存地址相等的时候,才能返回true,每个对象都有自己的一块内存,因此必须指向同一个对象才返回ture。
三、如果想要自定义两个对象(不是一个对象,即这两个对象分别有自己的一块内存)是否相等的规则,那么必须在对象的类定义中重写equals()方法,如果不重写equals()方法的话,默认的比较方式是比较两个对象是否为同一个对象。
在Java API中,有些类重写了equals()方法,它们的比较规则是:当且仅当该equals方法参数不是 null,两个变量的类型、内容都相同,则比较结果为true。这些类包括:String、Double、Float、Long、Integer、Short、Byte、、Boolean、BigDecimal、BigInteger等等,太多太多了,但是常见的就这些了,具体可以查看API中类的equals()方法,就知道了。
Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
对象的相等与指向它们的引用相等,两者有什么不同?
首先,对象在内存堆上,引用在内存栈上(理解为线和气球的关系)
对象相等表示2个是同一对象,即同一快内存,而引用相等,只是2个引用的地址值相等,都指向的堆上对象的地址
如果两个对象具有相同的引用,则它们一定相等
是不是两个引用指向同一个对象,就认为这两个引用相等?
这个是对的。
另外,如果要比较不同引用指向的对象,他们的内容(指对象的各属性值)是否相等。如果是自己写的类的对象,则要自己覆盖equals方法。
“利用.equal来比较,则比较两个对象的内容是否一致”这种观点是不对的。虽然对String类是对的,只是人家在写String类的这个方法时,是这样实现的。如果是自己写的类,必须自己覆盖这个方法,自己决定比较什么内容,否则默认就是比较引用是否相等。因为每一个类都默认继承了Object类,而Objcet类的equals方法里是使用==比较的。