一、Java基础(一)
1. 面向对象和面向过程的区别
面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题;
面向对象会先抽象出对象,然后用对象执行方法的方式解决问题;
面向对象开发的程序一般更易维护、易复用、易扩展;
2.基本类型与包装类
①Java 中的几种基本数据类型了解么?
Java 中有 8 种基本数据类型,分别为:
- 6 种数字类型:
- 4 种整数型:
byte
、short
、int
、long
- 2 种浮点型:
float
、double
- 4 种整数型:
- 1 种字符类型:
char
- 1 种布尔型:
boolean
为什么像 byte
、short
、int
、long
能表示的最大正数都减 1 了?
因为在计算机中以二进制补码来表示整型,其中首位是用来作为符号位的,0表示正数,1表示负数,
当符号位为0,数值位也全为0时表示0,而当符号位为1时,数值位全为0时表示-2^n,所以0开头的正数有一个用来表示0了,所以比负数少了一个;
②基本数据类型和包装类型的区别
Ⅰ. 用途不同:包装类型可以用于泛型,而基本数据类型不可以;
Ⅱ. 占用空间不同:基本数据类型占用空间比包装类型小;
Ⅲ. 比较方式不同:基本数据类型用==比较的是值,而包装类型比较的是对象的内存地址,要想比较包装类型的值应当用equals()方法;
Ⅳ. 默认值不同:基本数据类型中数值的默认值是0,boolean连续的默认值是false,而包装类型属于引用类型,默认值是null;
③包装类型的缓存机制/常量池技术了解吗?
包装类型的常量池技术指的是Byte、Short、Integer、Long这四种整型的包装类默认创建了[-128, 127]的缓存数据,Character创建了数值在[0, 127]的缓存数据,Boolean直接返回TURE或FALSE,
对于在上述范围内的包装类型,会直接从缓存中返回对应的对象,无需创建新的对象,只有在超出范围或是手动new一个对象时,才会创建新的对象;
④自动装箱与拆箱了解吗?原理是什么?
自动拆装箱是一种语法糖,
其中自动装箱指的是将基本数据类型转换成对应的包装类型,实际上是调用了对应包装类型的静态方法Xxx.valueOf(),例如Integer a = Integer.valueOf(1)
;
自动拆箱指的是将包装类型转换成对应的基本数据类型,实际上是调用了包装类型的xxxValue()方法,例如Integer a = 1; int b = a.intValue()
;
⑤了解自动拆箱引发的NPE(Null Pointer Error 空指针异常)问题吗?
因为自动拆箱实际上就是调用了包装类型的xxxValue()比如intValue()方法,所以当调用者为null时,就会引发空指针异常,
比如在三目运算符中,当一个表达式为基本数据类型,另一个为包装类型时,就会触发自动拆箱,此时若包装类型为空,就会触发空指针异常,
解决办法是尽量让三目运算符中的两个表达式都是包装类型、或是都是基本数据类型,这样就不会触发自动拆箱了;
3.相等的判断:== 和 equals() 的区别
①使用==判断是否相等:对于基本数据类型,判断的是数值,对于引用类型,判断的是对象的内存地址;
②使用equals()方法判断引用类型是否相等:
对于重写了equals()方法的类,会使用重写的equals()方法进行比较,通常都是对类中的各个属性的值进行比较,
对于没有重写equals()方法的类,则会使用父类Object的equals()方法进行比较,实际上就是使用==比较对象的内存地址;
public boolean equals(Object obj) {
return (this == obj);
}
③因为在使用对象调用equals()方法时若调用者为null,可能会出现空指针异常,所以更推荐使用JDK7中引入的工具类Objects的equals()方法,
其逻辑是若两个对象内存地址相等,或第一个对象不为空,且使用第一个对象调用其equals()方法与第二个对象比较的结果为true,则返回true,否则返回false;
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
4.深浅拷贝
标签:拆箱,八股文,包装,数据类型,equals,对象,类型,Java,高频 From: https://www.cnblogs.com/AvavaAva/p/17877405.html