阅读更多
12.内存地址与hashcode关系。
每当new一个对象,则一定会开辟一份新的内存空间,该空间则由一个唯一的地址码指代。
对于Object对象,hashcode与内存地址唯一映射,hashcode由确定的算法通过内存对象产生。
如果重写了hashcode,则hashcode就未必与内存地址有关系了。
1.==与equals区别,
==比较内存地址(非hashCode)。
未重写equals方法的对象比较内存地址。
重写了equals方法的对象根据重写的条件来定。
e1):下列输出false是因为内存地址不一样
Integer i1=new Integer(1);
Integer i2=new Integer(1);
System.out.println(i1==i2);
Integer i3=1234567;
Integer i4=1234567;
System.out.println(i3==i4);
e2)下列输出true是因为数字[-128,127]之间装箱会使用缓存对象
Integer i3=123;
Integer i4=123;
System.out.println(i3==i4);
2.map中的key如何比较相等:
用对象的equals方法。
2.Long是否适合做map的key
适合,因为Long重写了equals方法,longValue相等的两个Long对象equals必相等,而map的key正是通过equals方法识别是否相等。
3.Integer是否适合做map的key.
适合,因为Integer重写了equals方法,longValue相等的两个Long对象equals必相等,而map的key正是通过equals方法识别是否相等。
4.比较两个Long是否相等。
equals
5.Integer比较大小。
equals
6.Long与Integer比大小
转换成基本类型再比较。
7.Long与Integer相互转换。
1)Integer转为Long
Integer i5=12345678;
Long i6=i5.longValue();
2)Long转为Integer
Long i5=12345678L;
Integer i6=i5.intValue();
3)将long型转化为int型,这里的long型是基础类型:
long a = 10;
int b = (int)a;
4)int 转化为Long
int a = 10;
long b = a;
8.new与非new的区别。
String s5="abc";
String s6="abc";
System.out.println(s5==s6);
String s8=new String("abc");
System.out.println(s5==s8);
因为 String s5="abc"; 是从常量池中拿。
new String("abc")是新开辟内存空间,一般不用这种方式。
10.解释integer与Long的128问题。
-128到127间的值北放到了一个数组中,即代码中的LongCache.cache[]/IntegerCache.cache[],所以我们拿到的是同一个实例,同理其他大类型也是相同,能够在看下Integer验证下
11.对象属性应该用基本类型还是包装类型?
建议使用包装类型,包装类型有NULL,可以区分出是否赋值了。
当基本类型为0时候,就无法直接判断是因为初始值给的0还是赋值给了0.
如何比较两个Double是否相等?
如何比较两个Float是否相等?
Inter与Double互相转换?
Long与Double互相装换?
Double与Float互相转换?
Double与Float精度比较及适用场景?
Byte的特点及适用场景有哪些?
BigDecimal的应用场景有哪些?