JAVA 基础(二)
谈谈数组(Array)和列表(ArrayList)的区别,两者在什么时候使用
回答:
(1)Array可以包含基本类型和对象类型,ArrayList只能包含对象类型
(2)Array大小是固定的,而ArrayList的大小是动态变化的。
(3)ArrayList提供更多的特性和方法。
对于基本数据类型,集合自动装箱减少工作量,在处理固定大小的基本数据类型的时候,Array更比较快捷
·解释一下什么是值传递和引用传递
值传递是相当于传递的该变量的一个副本,副本进行改变而原变量不变。
引用传递,则是对该对象的地址的一个副本进行传递,而不是原对象本身,所以引用对象进行改变则原对象本身也会被改变
一般的,我们认为Java内的传递是值传递
·java支持的数据类型有哪些,什么是自动拆装箱
(1)八种基本数据类型:
byte
char
long
short
float
double
int
boolean
(2)自动拆装箱,是java编译器在基本数据类型和对应的对象包装类型之间的转换。
int 转换为integer是装箱,反之为拆箱
·解释一下4.0-3.6=0.40000001这种现象
在计算机中进行计算时,并不是10进制进行的计算,而是转换为2进制进行的计算,在这个过程中,出现了误差
· 讲一下十进制在内存中是怎么存的
补码的形式(并不是很理解!!!)
·说一下lambda表达式的优缺点
优点:
简洁,容易并行计算
缺点:
不进行并行运算时,没有传统的for循环快
不容易调试
对于其他没有学过的程序员来说,不容易看懂
·java8的新特性
lambda表达式的加入
方法引用,与lambda联合使用,减少冗余代码
默认方法
新工具,新的编译工具: nashorn引擎jjs,类依赖分析器jdeps
Stream API的添加,函数式编程风格引入java
Date Time API 加强对日期与事件的处理
Optional类 用来解决空指针异常
js引擎
·符号“==”比较的是什么
在比较内存引用时,如果两个对象的引用完全相同则返回true,反之为false
在比较基本类型,则是对值得比较是否相等
·解释Object若不重写hashCode()的话,hashCode()如何计算出来的
hashcode是本地方法,即用c语言和c++实现的,该方法直接返回对象的内存地址
·解释为什么equals和hashcode一起重写?
如果不进行equals重写的话,则是对两个对象的内存地址进行的比较,无法对我们所想比较的值进行比较,即使是相等的值也会变为不相等,所以要进行重写
(hashcode进行重写,还不是很明白!!!)
·Map的分类和常见情况
Map 主要用于存储键值对,可以通过键来得到值,不允许键重复,允许值重复
HashMap 是常用的Map,他是根据键的hashcode值来存储数据,可以通过键来得到值,访问速度快,遍历时,顺序是随机的,其中,只允许一条记录的键为Null,多个记录的值为null
,不支持同步,即一个时刻多个线程同时写Hashmap,导致数据不一致,需要用同步锁来使它同步
HashTable与HashMap类似,但是不允许记录的键或者值为空,支持同步,即一个时刻只能有一个线程写hashtable,所以效率比较低
LinkedHashMap是HashMap的一个子类,保存了写=插入顺序
,在遍历时,先得到的是先插入的记录
TreeMap实现SoftMap接口,能够保存的记录根据键排序,默认按键的升序排序,也可以指定排序的比较器,遍历时,是排过序的记录