每日十题八股-2024年11月27日
1.类型互转会出现什么问题吗?
2.为什么用bigDecimal 不用double ?
3.装箱和拆箱是什么?
4.Java为什么要有Integer?
5.Integer相比int有什么优点?
6.那为什么还要保留int类型?
7.说一下 integer的缓存
8.怎么理解面向对象?简单说说封装继承多态
9.多态体现在哪几个方面?
10.多态解决了什么问题?
1.类型互转会出现什么问题吗?
数据丢失,数据溢出,精度损失和类型不匹配导致的错误。
2.为什么用bigDecimal 不用double ?
double 使用二进制表示数值,而许多常见的十进制数(如 0.1 或 0.2)在二进制中无法准确表示,因此会导致不精确的计算结果。特别是当执行多个浮点运算时,误差会累积,最终影响结果的正确性。
BigDecimal 是一个高精度的类,能够表示任意精度的小数,避免了浮点数在精度上的限制。它内部使用的是十进制表示,适合精确的财务计算或需要高精度的科学计算。
使用 BigDecimal 时,可以指定所需的精度,并确保计算不会因舍入误差而不准确。
3.装箱和拆箱是什么?
装箱是从包装类转到基本数据类型的过程。
拆箱是从基本数据类型转到包装类的过程。
在java1.5之前都是手动进行转换,之后可以自动装拆箱。自动装箱主要发生在两种情况,一种是赋值时,另一种是在方法调用的时候。
自动装拆箱有一个弊端就是,在编码不够合理的时候,会创建大量的包装类对象。
Integer iObject = Integer.valueOf(3);
int iPrimitive = iObject.intValue();
4.Java为什么要有Integer?
其实就是问为什么要有包装类?
包装类就是把基本数据类型和与它相关的处理方法放到一起。
好处有:适配集合类操作,泛型中要求使用引用类型,转换类型中的应用(int要转String,必须转Integer,再转String)。
5.Integer相比int有什么区别?
int是基本数据类型,基本数据类型在内存中存放的位置是栈。
Integer是对象的引用,对象存放在堆中,需要实例化,额外分配内存,没有实例化就可能出现空指针异常。
6.那为什么还要保留int类型?
Integer对象占16字节,一个int占4字节。int读写和存储效率高。
7.说一下 integer的缓存
在Integer类内部会实现一个静态缓存池,用于存储特定范围内的整数值对应的Integer对象。默认情况下,范围为-128-127。用Integer.valueOf(int)创建一个范围内对象的时候,就会复用缓存中的现有对象。
8.怎么理解面向对象?简单说说封装继承多态
面向对象是一种编程范式。将现实生活中的事物抽象为对象。对象的属性和行为分别抽象为属性和方法。以对象为中心,对象之间的交互实现功能。具有封装,继承和多态三个特性。
封装就是将属性和方法细节隐藏在对象内部。外部通过接口使用。
继承就是子类可以自动继承父类的属性和方法,代码复用高,层次清晰。
多态是指允许不同类的对象对同一消息作出响应。即同一个接口,使用不同的实例而执行不同操作。
9.多态体现在哪几个方面?
多态性可以分为编译时多态(重载)和运行时多态(重写)。它使得程序具有良好的灵活性和扩展性。
重载是编译时的多态,是在一个类中对同名方法的不同实现。
重写是子类继承父类时,重写父类的方法。
接口实现:不同类实现统一接口。声明的时候用接口的话,就可以调用不同的实现类。
向上转型和向下转型:向上转型(子转父)可以当做隐藏自身的方法,所以,再转回来(向下转型)方法就会恢复原状。该是你的还是你的。
直接向下转型(父转子),父类不具有子类的独有方法,所以即使转化成功,也是个残废儿子,还不如不转,所以直接报错转化失败。不是你的你想都别想。
10.多态解决了什么问题?
多态可以提高代码的扩展性和复用性。