1.java中==和equals和hashCode的区别
== 是判断相等运算符,用于比较基本数据类型的值是否相等,或者引用类型对象的内存地址是否相等
对象存放在堆中,栈中存放的是对象的地址.
可以看出"=="对栈中进行比较的.
Integer a1 = 127;
Integer b1 = 127;
Integer a = 128;
Integer b = 128;
System.out.println("a1==b1:" + (a1 == b1));
System.out.println("a==b:" + (a == b));
对于-128到127之间的数,会进行缓存,
equals
(1)默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法.主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)
(2)覆盖equals方法 String中equals方法的运行步骤
若A==B 即是同一个String对象 返回true
若对比对象是String类型则继续,否则返回false
判断A、B长度是否一样,不一样的话返回false
逐个字符比较,若有不相等字符,返回false
hashCode
当向集合中插入对象,当集合中有大量数据时.
2.int、char、long各占多少字节数
1字节: byte , boolean
2字节: short , char
4字节: int , float
8字节: long , double
1byte = 8bit
3.int与integer的区别
Integer是int的包装类
(1).int是一个基础类可以直接使用,Integer是给对象需要实例化
(2).int默认是0,Integer默认值时null
尽量不要使用封装类,每次都要拆包 和封包
对应的基础类,也有封装类
4.多态
(1)一个对象有多个特征
(2)条件 :继承,重写,父类引用指向子类对象.
(3)实现:继承父类重写方法,实现接口,方法重载
5.String、StringBuffer、StringBuilder区别
String 不可改变性, 用String对象来改变 ,把原有对象变为垃圾被回收,在创建新的对象.
string改变数据可复用,不会每次新建
stringBuffer 线程安全,大量数据,在多线程下使用.
StringBuulder 线程不安全,单线程下使用
6.内部类的作用
定义:把一个类定义在另外一个类中,这个类就是内部类。
意义: 内部类可以实现更好的封装;内部类的使用可以实现多重继承;
成员内部类:
访问: 外部类所以静态,非静态成员
被访问: 需要有外部类实例和内部类实例.就可访问
静态内部类:
访问: 可访问外部类的静态 成员, 不可非静态成员
被访问: 访问非静态类,需要创建一个外部类实例. 访问静态n类,使用内部类类名访问内部类的静态成员。
局部内部类:内部类对象仅仅为外部类的某个方法使用
在方法声明时不能包含任何修饰符.包括静态.
匿名内部类: 匿名内部类就是没有名字的内部类;
不能定义任何静态成员、方法。
方法不能是抽象的;
必须实现接口或抽象父类的所有抽象方法。
访问的外部类成员变量或成员方法必须用static修饰
7.抽象类:
抽象类是为了把相同的但不确定的东西的提取出来,为了以后的重用。定义成抽象类的目的,就是为了在 子类中实现抽象类
只有被继承,不能被实现.
抽象类中可以有抽象方法,也要用在abstract关键字申明.
继承抽象类子类必须重写抽象类中的抽象方法
有抽象方法, 一定是抽象类.抽象类可以没有抽象方法
8.接口
interface 是支持抽象类定义的两种机制,解耦.一个类可继承多个接口
8.父类的静态方法能否被子类重写
不能 可以通过子类实例调用静态方法
9抽象类与接口的应用场景
抽象类适用于子类之间有一些共同的属性或者方法,不需要子类去单独实现
接口适用于子类可能只是需要实现特定的一组功能,对其他的并没有约束
9.进程和线程的区别
进程是资源分配的最小单位,线程是应用的最小的单位.
一个应用可以有一个或两进程,
同一进程下的线程共享全局变量、静态变量等数据
10.序列化的方式
Serializable 和Parcelable
Parcelable比Serializable性能高
Serializable 使用详情页面 会产生大量临时变量,效率低
Parcelable 不能用于数据存储在磁盘的情况,因为不能保证数据的持续性
11.静态内部类的设计意图
网友评论