Android面试(Java部分)

equals:是Object类中的方法,判断对象的内存地址引用是不是同一个地址。若没重写此方法,返回的结果和==相同,若重写了该方法,就根据代码逻辑而定,一般重写都是根据内容是否相等来判断的。

hashCode:是一个本地方法,计算对象实例的哈希码(散列码),实际上返回的是一个int整数,这个哈希码的作用是确定对象在哈希表中的索引位置。因为散列表存储的是键值对,特点就是能根据“键”快速的检索出“值”。在对象进行散列时作为key存入。在批量的对象比较中,hashCode要比equals快,在添加新元素时,先调用这个元素的hashCode方法,能立刻定位到它应该存储的物理位置,若该位置没有元素,可直接存储,若有元素,就调用它的equals方法与新元素进行比较,若相同则不存,不相同,就放到该位置的链表末端。

注意点:equals相等,则hashCode一定相等;hashCode相等,equals不一定相等;hashCode不等,equals一定不等。所以重写equals时,需要重写hashCode,确保通过equals判断为true的俩对象具备相等的hashCode返回值。

注意点:Integer是int的包装类,对于-128~127的Integer值,是原生数据类型int,会在内存里重用,==比较的是数值,但超出这个范围比较的就是地址。Integer默认值是null不是0,当new 一个Integer时,实际是生成一个指向此对象的引用,而int是直接存储数据的值。

3.String,StringBuilder,StringBuffer的区别

执行速度:StringBuilder  >  StringBuffer  >  String

String:字符串常亮,不可变,每次改变值都会产生新的对象,效率低且浪费内存空间,但线程安全。

StringBuilder:字符串变量,修改字符串不会产生新的对象,效率高但多线程下不安全。

StringBuffer:字符串变量,加了同步锁,多线程下是安全的,但效率比StringBuilder低一些。

小扩展:final可以修饰变量、方法、类,被final修饰的类不能被继承,其所有成员方法都隐式指定为final方法,private修饰的方法就被隐式指定为final方法。

4.内部类

就是在类的内部再定义一个类。作用:

(1)实现多重继承:Java继承只能单继承,使用内部类可以实现多重继承;

(2)很好的实现隐藏,外部类不可以是private或protected,但内部类可以;

(3)拥有外部类所有元素的访问权限。

(5)通过匿名内部类优化接口的实现,如点击事件。

4.1.静态内部类和非静态内部类有什么区别

静态内部类:以static修饰,属性和方法可以为静态的或者非静态的;静态内部类实例A.B b=new A.B();静态内部类不会持有外部类的引用,只可以引用外部类的静态方法或属性,当然是可以通过外部类的实例访问其他方法和属性的。优点是加强了类的封装性,提高了代码的可读性。

成员内部类:作为外部类的一个成员存在,属性和方法不能声明为静态的;实例A.B b=new A().new B();持有外部类的引用,可以引用外部类的方法和属性。

内部类是完全依赖于外部类存在的,但静态内部类是则可以完全独立&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值