天天看点

对象

<b>对象的创建</b>

在使用new 创建了一个对象,也就意味此对象永远拥有Class类中的全部属性,除了Static 类型的数据,因为Static 数据是公用的,即使不创建对象也可以使用,这就是我们为什么使用对象来调用Static方法的时候会出现黄线的原因。曾今我常常次困惑

在使用new 创建了一个对象时,会涉及到的数据结构,栈,堆,方法区

在对象比较的时候基本数据类可以使用 == 来比较,因为基本数据类型不会创建对象,所有的基本数据类型的值放在栈中,如果基本数据类型的值相等,就返回true

一般对象比较也使用 == 方法来比较,这种计较方式叫做对象地址比较,但是往往返回的结果是false 这是因为对象的引用地址不一样,很多书上常常这样说 String 类型调用 equals方法是比较的值,特别说明(值 ,的概念)值,仅仅数据前面的基本数据类型,equals 方法是在Object 方法中定义的,但是在String类将Object的equals方法覆写了,只不过在String类中将,String 对象的比较形式变化了、在自定义覆写equals 方法的使用切记一定要覆写 hashCode 方法,因为在使用HashSet集合添加元素的时候,对象的比较形式是,先比较hashCode值,如果不覆写,按照常理来说,基本上每一个对象都不会相等,还有System.lang包中得 indentityHashCode()方法也可以取得的对象的hashCode 值,该方法默认调用的也是hashCode方法,不管hashCode方法是否被覆写。

在java 中可以这么说,出了基本数据类型,一切皆对象,所以在调用equals 方法还是对象比较,而不是值比较,

其实在对象的比较上一共有两种比较方式,第一种是上面说的对象比较,第二种是hashCode值比较,在java中取得的hashCode值,其实也就是栈内存中得地址,其实也是十六进制数字,在调用String 中equals 方法时,往往会比较两次,第一次比较的是hashCode值,如果hashCode值不相则对象一定不会相等,如果hashCode值相等,则会在调用一次equals 方法来比较两个对象的属性是否相等,如果不相等则还是返回false ,如果相等就返回true

属性访问

如果想要访问类中的方法,有两种方法来访问,第一种使用创建的对象来访问方法,第二种类中得方法是Static 修饰,则不需要对象就可以调用,通过类点方法名称,当然通过对象来调用Static 方法也是可以得,但是更本没有这个必要,而且编辑器,还有做出莫名的警号信息,对象访问就仅仅只有这样两种