java中为什么,int类型的成员变量不能调用equals方法以及hashCode方法,而String类型的成员变量可以?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中为什么,int类型的成员变量不能调用equals方法以及hashCode方法,而String类型的成员变量可以?相关的知识,希望对你有一定的参考价值。

比如:int year;
year.equals........... 会报错

String year;
year.equals............ 是对的

以下是equals方法的说明,很明显函数的参数需要时对象类型,而int属于基本类型,string则属于对象类型。其实你像int,double这种基本类型比较都是用==来判断的。
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。 望采纳
参考技术A 想跟你说的是这是JAVA语言的一种规则,数值型等要用“==”,系统会直接拿这两个数在内存内进行大小比较处理,而字符串的等要用equals方法去处理,它的处理办法是,按字符串从左到右的顺序,比较每个字符的asc码值,一旦遇到不想等那就会返回false。

这样说不知道你明白没有。
参考技术B 楼上说的很明确了,我想补充的是,int是基本数据类型,-没有引用指向的,
补:像String是类类型,有引用指向,所以地址不同(这就需要equals()方法判断内容一样“则相同”)
参考技术C int是整型就是数值要比较要用==,而equals是给字符类型相比较用的。。。。
int year中的year是要等于一个数值的,而string year中的year是字符串,所以呢,后者可以用equals...
参考技术D int是基本类型,equals是Object类型的方法 ,基本类型都没有equals方法。无法进行调用

类作为成员变量

声明定义一个类的时候,成员变量的类型经常有int,String等,其实看源码知道String也是一个类:

技术图片

说明是可以用类作为成员变量的;

技术图片

其中,构造方法用于创建对象时候调用,new的时候jvm默认调用,可以直接new无参的(人),也可以直接new有参赋值的(小明——身高体重等);

类作为成员变量时候,在成员方法中必须要用这个类变量点它的属性来用,不能直接用,直接用是在栈内存中的一个地址值;

set/get方法用于调用赋值或者获取值;

技术图片

 

以上是关于java中为什么,int类型的成员变量不能调用equals方法以及hashCode方法,而String类型的成员变量可以?的主要内容,如果未能解决你的问题,请参考以下文章

java中,在实例化一个类时,这个类中没有初始值的int类型成员变量i,i的值是否0?

java 既然子类能继承父类的所有属性与方法,那子类不能不定义成员变量?

类作为成员变量

java成员变量

java中证明成员变量有默认初始值

class中static总结-静态成员函数和静态成员变量