Android 常见面试题(一)
1、java 中 == 和 equals 和 hashCode 的区别
基本数据类型的 == 比较的值相等. 类的== 比较的内存的地址,即是否是同一个对象。
在不重写 equals方法的情况下,equals同比较内存地址,原实现也为 == ,如 String 等重写了 equals 方法,会判断字符串里的值是否相等。
hashCode 也是 Object 类的一个方法。返回一个离散的 int 型整数,一般在集合类操作中使用。为了提高查询速度。
如果两个对象 equals,Java 运行时环境会认为他们的 hashcode 一定相等。
如果两个对象不 equals,他们的 hashcode 有可能相等。
如果两个对象 hashcode 相等,他们不一定 equals。
如果两个对象 hashcode 不相等,他们一定不 equals。
2、int 与 integer 的区别
int 基本类型
integer 对象 int 的封装类
3、String、StringBuffer、StringBuilder 区别
String: 字符串常量 不适用于经常要改变值得情况,每次改变相当于生成一个新的对象
StringBuffer: 字符串变量 (线程安全)
StringBuilder: 字符串变量(线程不安全) 确保单线程下可用,效率略高于StringBuffer
4、什么是内部类?内部类的作用
内部类可直接访问外部类的属性
Java 中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static 修饰的类,不能使用任何外围类的非 static 成员变量和方法, 不依赖外围类)
5、进程和线程的区别
进程是 cpu 资源分配的最小单位,线程是 cpu 调度的最小单位。
进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。
一个进程内可拥有多个线程,进程可开启进程,也可开启线程。
一个线程只能属于一个进程,线程可直接使用同进程的资源,线程依赖于进程而存在。
6、final,finally,finalize 的区别
final: 修饰类、成员变量和成员方法,类不可被继承,成员变量不可变,成员方法不可重写
finally: 与 try...catch...共同使用,确保无论是否出现异常都能被调用到
finalize: 类的方法,垃圾回收之前会调用此方法,子类可以重写 finalize()方法实现对资源的回收
7、Serializable 和 Parcelable 的区别
Serializable Java 序列化接口 在硬盘上读写 读写过程中有大量临时变量的生成,内部执行大量的 i/o 操作,效率很低。
Parcelable Android 序列化接口 效率高 使用麻烦 在内存中读写(AS 有相关插件 一键生成所需方法) ,对象不能保存到磁盘中
8、静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
可继承 不可重写
如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。
9、成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
Java 中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static 修饰的类,不能使用任何外围类的非 static 成员变量和方法, 不依赖外围类)
使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
因为 Java 不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。
10、string 转换成 integer 的方式及原理
标签:面试题,内部,重写,常见,equals,线程,进程,Android,方法 From: https://www.cnblogs.com/AndroidXiaojiang/p/18316901String to integer: Intrger.parseInt(string);
Integer to string: Integer.toString();