Java基础知识复习

阅读更多
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的应用场景有哪些?







你可能感兴趣的:(JVM,equals,hashcode,内存地址,Long)