Android高级面试题汇总——Java篇(1)

(一) java基础面试知识点

1、java中==,equals和hashCode的区别

“==”:

         ==是运算符,用来比较两个值、两个对象的内存地址是否相等

“equals()”:

         equals是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过“==”来实现的。

         如果想比较两个对象的其他内容,则可以通过重写equals方法

“hashCode()”:

       hashCoed也是Object类里面的方法,返回值是一个对象的哈希码,同一个对象哈希码一定相等,但不同对象哈希码也有可能相等。

         如果两个对象通过equals方法比较相等,那么他的hashCode一定相等;

         如果两个对象通过equals方法比较不相等,那么他的hashCode有可能相等

         hashCode()效率比equals()效率高

         HashSet判断元素是否相等时先用hashCode()判断,如果hashCode()不同,则对象不等,如果hashCode()相同,再比较equals() ,大大提高了效率。所以要保证如果重写了equals(),也要重写hashCode()

         注:当输入数据量太大,哈希值长度却是固定32位,这意味着哈希值是一个有限集合,无法建立一对一关系,不同对象的hashcode相等是有可能会发生的

2、Java基本类型占用的字节数

         1字节: byte , boolean
         2字节: short , char
         4字节: int , float
         8字节: long , double

3、int与integer的区别

         Integer是int的包装类,int则是java的一种基本的数据类型;

         Integer变量必须实例化之后才能使用,而int变量不需要实例化;

         Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值;

         Integer的默认值是null,而int的默认值是0。

4、谈谈对java多态的理解

        多态是指不同子类型的对象对同一行为作出不同的响应;

       多态性分为编译时的多态性和运行时的多态性。方法重载实现的是编译时的多态性,而方法重写实现的是运行时的多态性;

       对于运行时多态,特别注意,父类引用指向子类对象,在调用实例方法时,调用的是子类重写之后的,并且不能调用子类新增的方法,对于属性和static方法来说,还是执行父类原有的

5、String、StringBuffer、StringBuilder区别

        String:String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间,适用于少量的字符串操作的情况;

        StringBuffer:StringBuffer是可变类,且是线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量,适用多线程下在字符缓冲区进行大量操作的情况;

        StringBuilder:StringBuilder是可变类,且是线程不安全的字符串操作类,速度更快,适用于单线程下在字符缓冲区进行大量操作的情况

6、什么是内部类?内部类的作用

定义:

        将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类

分类:

        (1)成员内部类

        成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员

        (2)局部内部类

        局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内

        (3)匿名内部类

        匿名内部类就是没有名字的内部类

       (4)静态内部类

        指被声明为static的内部类,他可以不依赖内部类而实例,而通常的内部类需要实例化外部类,从而实例化。静态内部类不可以有与外部类相同的类名。不能访问外部类的普通成员变量,但是可以访问静态成员变量和静态方法(包括私有类型)。一个静态内部类去掉static 就是成员内部类,他可以自由的引用外部类的属性和方法,无论是静态还是非静态。但是不可以有静态属性和方法

作用:

        (1)每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整;

        (2)方便将存在一定逻辑关系的类组

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值