1.java中==和equals和hashCode的区别
答:基本数据类型的时候 (==),比较的是他们的值。引用类型(类、接口、数组) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
equals()方法是用来判断其他的对象是否和该对象相等。其再Object里面就有定义。区别在于是否重写了该方法。
public boolean equals(Object obj) {
return (this == obj);
}
很明显Object定义的是对两个对象的地址值进行的比较(即比较引用是否相同)。但是为什么String里面调用equals()却是比较的不是地址而是堆内存地址里面的值呢。这里就是个重点了,像String 、Math、Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法。
总结:
1.hashCode是为了提高在散列结构存储中查找的效率,在线性表中没有作用。
2.equals重写的时候hashCode也跟着重写
3.两对象equals如果相等那么hashCode也一定相等,反之不一定。
2.int、char、long各占多少字节数
答:所谓的占用字节数 就是申请内存的时候所占的空间大小。int 4字节, char 2字节,long 8字节。
3.int与integer的区别
答:1.Integer是int的包装类,int则是java的一种基本的数据类型;
2.Integer变量必须实例化之后才能使用,而int变量不需要实例化;
3.Integer实际是对象的引用,当new一个Integer时,实际上生成一个指针指向对象,而int则直接存储数值
4.Integer的默认值是null,而int的默认值是0。
4.探探对java多态的理解
答:多态用于继承和接口情况。比方说你是person的子类,那么你本身就是person
在java中,多态大致可以分为以下几种情况:
1.person为父类,student为子类。那么:person p=new student();
2.fliable为接口,bird为实现接口的类,那么:fliable f=new bird();
3.fliable为抽象类,bird为继承fliable的类,那么:fliable f=new bird();
5.String、StringBuffer、StringBuilder区别
答:String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况(线程不安全
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况(线程安全
6.什么是内部类?内部类的作用
内部类的种类有4种:成员内部类、静态内部类、匿名内部类、局部内部类。
1、内部类可以很好的实现隐藏。
非内部类是不可以使用 private和 protected修饰的,但是内部类却可以,从而达到隐藏的作用。同时也可以将一定逻辑关系的类组织在一起,增强可读性。
2、间接的实现多继承。
每个内部类都能独立地继承自一个(接口的)实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。
7.抽象类和接口区别
答:1.抽象类要被子类继承,接口要被类实现。
2.接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
3.接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。接口是设计的结果,抽象类是重构的结果。抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。抽象类可以没有方法和属性
8.super 与 extends 有何不同?
答:<? extends T>:是指[上界通配符], <? super T>:是指[下界通配符]
Plate<Fruit> p=new Plate<Apple>(new Apple());
//不能存入任何元素
p.set(new Fruit());//Error
p.set(new Apple()); //Error
下界<? super T>不影响往里存,但往外取只能放在Object对象里Plate<Fruit> p=new Plate<Apple>(new Apple());
//存入元素正常
p.set(new Fruit());
p.set(new Apple());
/读取出来的东西只能存放在Object类里。
Apple newFruit3=p.get(); //Error
object newFruit2=p.get(); //true
9.父类的静态方法能够被子类继承,但是不能够被子类重写,即使子类中的静态方法与父类中的静态方法完全一样,也是两个完全不同的方法。
10.序列化的方式
答:1、Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流、rmi以方便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。
Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。
对于Serializable,类只需要实现Serializable接口,并提供一个序列化版本id(serialVersionUID)即可。而Parcelable则需要实现writeToParcel、describeContents函数以及静态的CREATOR变量,实际上就是将如何打包和解包的工作自己来定义,而序列化的这些操作完全由底层实现。
11.静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
答:父类的静态属性和方法可以被子类继承。不可以被子类重写。原因 :
static修饰函数/变量时,其实是全局函数/变量,它只是因为java强调对象的要
挂,它与任何类都没有关系。靠这个类的好处就是这个类的成员函数调用static方法不用带类名。注意:static关键字可以用修饰代码块.static代码块可以置于类中的任何一个位置,并可以有多个static代码块。在类初次被加载时,会按照静态代码块的顺序来执行,并且只会执行一次。
12.成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用
答:Java集合类HashMap内部就有一个静态内部类Entry。Entry是HashMap存放元素的抽象,HashMap内部维护Entry数组用了存放元素,但是Entry对使用者是透明的。像这种和外部类关系密切的,且不依赖外部类实例的,都可以使用静态内部类。
如果一个类只在某个方法中使用,则可以考虑使用局部类。
匿名内部类使用广泛,比如我们常用的绑定监听的时候
13.闭包和局部内部类的区别
答:局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。
闭包(Closure)是一种能被调用的对象,它保存了创建它的作用域的信息。JAVA并不能显式地支持闭包,但是在JAVA中,闭包可以通过“接口+内部类”来实现。
Java基础随手记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- Java基础知识整理 [x] java中==和equals和hashCode的区别 [x] int、char、lo...