0312pingCAP

应该是凉了

我的很大问题还是在于积累的不足,对一些知识只有很浅层的理解,这样面试官稍微follow up一下,我就答不出来。

Java原始类型和封装类型的区别,以及为什么要有这两个类型

  • 基本类型只能按值传递,而每个基本类型对应的封装类是按引用传递的。

  • 对象在堆上创建,基本类型在栈上建立。基本类型由于在堆栈中,效率会比较高,但是可能会存在内存泄漏的问题。

  • 封装类的出现,是为了更方便的使用一些基本类型不具备的方法,比如valueOf(),toString()等等。还有如果想传递一个int对象的引用,而不是值,那只能用封装类。

  • 在某些场合,需要用到封装类,比如一个集合List,它只能往里面添加对象,也就是Object,那么直接存数字肯定是不行 的,则需要将数字封装成封装类型对象再存到该List中,如

List list = new ArrayList(); 
list.add(new Integer(1)); 
list.add(new Integer(2)); 
list.add(new Integer(3)); 
list.add(new Integer(4)); 

JDK5.0以后可以自动封包,所以可以简写成

List list = new ArrayList(); 
list.add(1); 
list.add(2); 
list.add(3); 
list.add(4);

"=="和"equals()"方法:

  • “==”:基本型和封装型比较时,封装型会拆箱后比较值;两个封装型比较,如Integer,其值相同且在常量池范围内则返回true,否则返回false,因为指向不同的引用?(最后一句话我不清楚正确与否)。作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;作用于引用类型的变量,则比较的是所指向的对象的地址;
  • “equals”:这个方法未被重写前就是“==”。但是它经常会被重写。两个基本值比较,先比较类型,再比较值,都相同则true;基本型和封装型比较,会先将基本型装箱再比较其类型和值
    再直接点:下面引用自
    (https://blog.csdn.net/meism5/article/details/89062382?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161555718516780271547926%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161555718516780271547926&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~hot_rank-3-89062382.first_rank_v2_pc_rank_v29&utm_term=%3D%3D+equals+%E8%A3%85%E7%AE%B1)

使用==比较:

基本类型-基本类型、基本类型-包装对象返回true
包装对象-包装对象返回false
缓存中去的包装对象比较返回true(JVM 缓存部分基本类型常用的包装类对象,如 Integer 缓存 -128 ~ 127 )

        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;
         
        System.out.println(i1==i2); //打印true
        System.out.println(i3==i4); //打印false

使用equals比较:

包装对象-基本类型返回true
包装对象-包装对象返回true

底下的问题等我看了JVM再说。。。

Java虚拟机的组成及各自作用

在方法中生成一个新的对象,那么它存在哪里?

虚拟机栈的作用,以及它为什么叫栈

引用一个对象的时候,什么情况下其引用会减1?

你可能感兴趣的:(面试,概念整理,问题碎碎念,java,堆栈)