Java9 Object & Objects

构造方法:只有一个空参.

方法: toString 21bb9c932358610842e0b5cb548500d5_MD5 其中,@后的是对象的地址值(简单理解). 1ab1798cbbd88af8ebef3cf8204af7b6_MD5 我们直接打印一个对象,得到的结果和toString后的结果是一样的,为什么? a0a2a62f2c29fc53985e8345a0d466a6_MD5 out是System中的静态成员.因此用System.out.println是out中的方法. 1fc63c3f5850cea1d6d54fb1962d4aca_MD5 843084e547255047a4e717715f4e9ccb_MD5 e2b4de4566d02e855b53140ae6942f52_MD5

我们可以重写toString,从而方便打印. equals Object的默认方法,就是调用==,比较地址值. 563ae679138a91ec36f8f03e6a6edfbd_MD5 因此我们可以重写.IDEA帮我们自动生成的格式: b2e9ef2929beb9f12f8fc28934b89d8c_MD5 这样生成的会比较每个属性的值. a9fe6ca964448660d3f4e600fe99bba0_MD5 两个都是false. 为什么? String类的equals: f10daaf62b4a137f070f0c437ca89304_MD5 可见,如果比较对象不是String,那么就返回false. StringBuilder根本没有重写equals方法,因此比较的是地址值.

clone fe35bf8048aeb25404932622c97819f2_MD5 6d163cd2f8991a14f3b666933b009070_MD5 由于protect我们调用不了(protect只能访问同一个包,以及不同包的子类),因此只能重写 在重写之前,了解一下: 7558ee48fc996ec95f0771198cd20feb_MD5 这个接口是干嘛的? a71c27efd5a41fecba1b6b9751089598_MD5 回到Object,假如我想看Object如何实现clone的,那么怎么办? 066d3d3f816949d6dfab03c8c3704827_MD5 52fa6c00d900c867de4d41c47841715e_MD5 注意,clone返回的是Object,因此需要强转. Object默认的clone是浅拷贝.如果需要深拷贝,需要自己实现 991d38792701bc0f6df5fd07bfb4991a_MD5 ps:为什么String不需要处理?因为String虽然存的是地址,但是都是指向串池的常量,浅拷贝也不要紧. 刚才写的深拷贝还是太麻烦了.我们一般是通过引入第三方工具来辅助我们进行深拷贝的. 如gson eb7a1c87c908b4d70e955a2be1aff7c0_MD5

在项目根目录添加/lib,导入jar包,然后add as Library. 171e0a7894a6fc777c46207129d37e40_MD5 756dc64cae3cf04b59866b3047d27bbb_MD5 也就是序列化之后再反序列化,就能得到新对象.


Objects 工具类

f9ab6c2e18847d2757f43cb6d5614f2b_MD5 太麻烦了. 7ab64b3c9065c3ef9cdef382146ff1a1_MD5 079451f2e9612b1addfd1ef1eda1d322_MD5 源码: d891961497b11b4a04af43c8d41a08be_MD5 f837681eb154dd59e7b8173f65f9e95c_MD5