1.关于 BigDecimal, 以下哪些用法是正确的:( )
A. 对于精度有要求的计算,建议使用 BigDecimal ,而不是float, double
B. BigDecimal b = BigDecimal.valueOf(0.199);
C. BigDecimal b = new BigDecimal(“0.29999”);
D. BigDecimal b = new BigDecimal(0.39999f);
正确:ABC
对于D选项,BigDecimal构造函数没有float类型的参数对象,常用有
BigDecimal(int);
BigDecimal(double);
BigDecimal(long);
BigDecimal(String);
BigDecimal类型数据计算方式: https://blog.csdn.net/qq_45904119/article/details/135142888
2.以下关于集合处理说法不正确的是:
A. 使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,长度为 0 的空数组。
B. 使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。
C. 泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用get方法,而<? super T>不能使用add方法,作为接口调用赋值时易出错。
D. 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
不正确选项:C
泛型通配符<? extends T>来接收返回的数据,此写法的泛型集合不能使用add方法,而<? super T>不能使用get方法,作为接口调用赋值时易出错。Extends Consumer Super)原则:第一、频繁往外读取内容的,适合用<? extends T>。第二、经常往里插入的,适合用<? super T>。
考察多态理解,get子类的父类,不知道是哪个父类,用Object来接收,自己知道去转换;你的父类一定是你子类的父类。
3.关于内存管理的说法,哪些是正确的
A. 一般情况下都是让对象在退出活动域(scope)后自动设置成null被回收,但对一些复杂的对象,例如数组、队列、树等,可能存在较为复杂的引用关系,GC回收效率一般较低,尽早将其赋值为null可以加速内存回收。
B. finalize函数会加大GC工作量
C. 尽量避免强制内存回收(System.gc()),这会增加系统内存回收的最终时间,降低系统性能
D. 尽量避免在类的构造器中创建、初始化大量对象,主要是为了避免在调用其子类的构造器时造成不必要的内存消耗
ABCD都正确
对于B选项:
finalize()和垃圾回收器的运行本身就要耗费资源, 可能导致程序的暂停;
如果一种未被捕获的异常在使用finalize方法时被抛出,这个异常不会被捕获,finalize方法的终结过程也会终止,造成对象出于破坏的状态。被破坏的对象又很可能导致部分资源无法被回收, 造成浪费;