前言
学习项目的过程中,我觉得自己有点太急功近利了一直跟着视频敲没有自己的思考(主要是最近在牛客读到了一位大佬👍👍👍,程序员牛肉的文章),🙌学技术不是一味的复制粘贴,特别是做项目,要边学边思考,一个功能的实现,我学会了什么技术,还有没有更好的可以替代它。
之前学的基础知识其实也没有学完,像集合,线程… 都还不知道是啥就开始学JavaWeb做项目了,在项目中使用队列存储我都一脸懵,在这里以问题的形式写一个学习笔记🤔,不仅仅是复习,也为以后的面试做准备,还有还有我的刷题网站是面试鸭呦🦆🦆🦆
1.Java中基本类型和包装类型的区别是什么?
存储方式不同:
基本类型:如果是局部变量则保存在栈上面,如果是成员变量则在堆中。
包装类型:保存在堆上。用途
除了定义一些常量和局部变量之外,我们在其他地方比如方法参数、对象属性中很少会使用基本类型来定义变量。并且,包装类型可用于泛型,而基本类型不可以。占用空间:
相比于包装类型(对象类型), 基本数据类型占用的空间往往非常小。初始化方式不同:
基本类型:直接赋值
包装类型:采用new的方式创建。性能区别:
基本类型:占用内存小,效率高
包装类型:因为是对象,涉及内存分配和垃圾回收,性能相对较低。
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);
}
}
小白啊!!!写的不好轻喷啊🤯如果觉得写的不好,点个赞吧🤪(批评是我写作的动力)
…。。。。。。。。。。。…
…。。。。。。。。。。。…