Java基础面试题(2)—Java(存储,变量)

发布于:2025-08-10 ⋅ 阅读:(15) ⋅ 点赞:(0)

前言

学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。

之前学的基础知识其实也没有学完,像集合,线程… 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆

1.Java中基本类型和包装类型的区别是什么?

  1. 存储方式不同:
    基本类型:如果是局部变量则保存在栈上面,如果是成员变量则在堆中。
    包装类型:保存在堆上。

  2. 用途
    除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。并且,包装类型可用于泛型,而基本类型不可以。

  3. 占用空间:
    相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。

  4. 初始化方式不同:
    基本类型:直接赋值
    包装类型:采用new的方式创建。

  5. 性能区别:
    基本类型:占用内存小,效率高
    包装类型:因为是对象,涉及内存分配和垃圾回收,性能相对较低。

2.Java中基本类型与引用类型的区别?

基本类型:包含int,float,double,char,boolean等,存储在栈内存中,方法中对基本类型参数的操作只会影响传递的副本,原始变量的值不受影响。
引用类型:包含所有的对象和数组,引用类型的变量存储的是对象在堆内存中的地址。当引用类型作为参数传递时,传递的时这个地址的副本。因此,方法内的修改可以影响到传入的对象的内容,但不会影响对象引用本身的地址。
🙌这里是不是看不太懂😵‍💫,我当时也是,其实可以理解为C语言中的变量与指针在函数传参应用中的区别。

🧩扩展

Java基本类型:

Java 中有 8 种基本数据类型,分别为:
6 种数字类型:
4 种整数型:byte、short、int、long
2 种浮点型:float、double
1 种字符类型:char
1 种布尔型:boolean。

直接存储数值变量,位于栈上(局部变量在栈上,成员变量在堆上,静态(类)字段在方法区)。不支持null

包装类型
每个基本类型对应一个包装类型(Integer,Long,Float,Double,Character,Byte,Boolean,Short)

包装类型是类,存储在堆中,可以用于面向对象编程,支持null

引用类型

引用类型是指那些不直接存储值,而是存储对实际数据的引用(类似于C/C++中的指针概念,但更安全和受限)的数据类型。引用类型的变量并不直接包含对象本身,而是包含一个指向内存中对象位置的引用。Java中的引用类型主要包括以下几类:包括类、接口、数组、枚举等。

✅总结:引用类型变量里存的不是对象本身,而是对象的“地址”或“电话号码”。你通过这个“号码”去操作真正的对象。

栈(Stack)
定义:栈是一种后进先出(LIFO, Last In First Out)的数据结构,用于存储方法调用过程中的局部变量、方法参数、返回地址等。(生命周期短,访问速度快。)
堆(Heap)
定义:堆是Java虚拟机(JVM)管理的一块内存区域,用于存储所有通过 new 关键字创建的对象实例。(生命周期较长,由垃圾回收器管理。)

3. 自动装箱与拆箱?
装箱:基本类型自动转换为包装类型对象。
拆箱:包装类型对象自动转换为基本类型的值。

因为Java是一直种面向对象语言,很多地方需要使用对象而不是基本数据类型。比如,在集合类中,我们是无法将int,double等类型放进去的。因为集合的容器要求的元素是Object类型

4.Java中成员变量与局部变量?
语法上:
成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;
成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
存储方式:
从变量在内存中的存储方式来看,如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。

举例:

public class VariableExample {

    // 成员变量
    private String name;
    private int age;

    // 方法中的局部变量
    public void method() {
        int num1 = 10; // 栈中分配的局部变量
        String str = "Hello, world!"; // 栈中分配的局部变量
        System.out.println(num1);
        System.out.println(str);
    }

    // 带参数的方法中的局部变量
    public void method2(int num2) {
        int sum = num2 + 10; // 栈中分配的局部变量
        System.out.println(sum);
    }

    // 构造方法中的局部变量
    public VariableExample(String name, int age) {
        this.name = name; // 对成员变量进行赋值
        this.age = age; // 对成员变量进行赋值
        int num3 = 20; // 栈中分配的局部变量
        String str2 = "Hello, " + this.name + "!"; // 栈中分配的局部变量
        System.out.println(num3);
        System.out.println(str2);
    }
}

小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)

…。。。。。。。。。。。…请添加图片描述

…。。。。。。。。。。。…


网站公告

今日签到

点亮在社区的每一天
去签到