Java相近知识点
Posted programmerzx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java相近知识点相关的知识,希望对你有一定的参考价值。
1.==和equals()的区别
== :比较的是值是否相等
如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址
equals:(注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象)
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。
重写equals方法一定重写hashcode
1.使用hashcode方法提前校验,可以避免每一次比对都调用equals方法,提高效率
2.保证是同一个对象,如果重写了equals方法,而没有重写hashcode方法,会出现equals相等的对象,hashcode不相等的情况,重写hashcode方法就是为了避免这种情况的出现。
2.值传递和引用传递
值传递:
是基本类型的传递,会把要传递的值复制一份传递给要赋值的变量,如果数据多,会占用大量内存
引用传递
是将对象的地址值传递过去,在方法的执行过程中,两个对象的内容相同,指向同一块内存地址,也就是说操作的其实都是源数据,所以方法的执行将会影响到实际对象。
3.int和Integer
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0
4.String和StringBuffer和StringBuilder
String
是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String
StringBuffer
字符串缓冲区,是线程安全的
StringBuilder
也是字符串缓冲区,线程不安全,但是效率高
对字符串进行修改的时候,特别是字符串对象经常改变的情况下,需要使用 StringBuffer 和 StringBuilder 类。效率比较StringBuilder > StringBuffer > String
以上是关于Java相近知识点的主要内容,如果未能解决你的问题,请参考以下文章