自己做网站百度能收录码,溧阳网站建设,门户网站 移动端,厦门seo搜索引擎优化基本数据类型和引用数据类型区别
java中数据类型分为基本数据类型和引用数据类型
8大基本数据类型
1.整数#xff1a;int#xff0c;long#xff0c;short#xff0c;byte
2.浮点类型#xff1a;float#xff0c;double
3.字符类型#xff1a;char
4.布尔类型intlongshortbyte
2.浮点类型floatdouble
3.字符类型char
4.布尔类型boolean
引用数据类型除了8大基本数据类型就是引用类型
类接口类型数组类型枚举类型注解类型字符串String型
区别
1.存储位置
基本数据类型存在栈中引用数据类型存在堆中。
2.值传递与引用传递
对于基本数据类型传递的是值本身即当函数参数传递时实际上是值的一个副本。函数内部的修改不会影响到原始变量。
对于引用数据类型传递的是引用即内存地址。这意味着函数内部对引用数据的修改会影响到原始数据。
3.生命周期
基本数据类型的生命周期与它们所在的代码块或作用域相关。一旦超出其作用域其值将被销毁。
引用数据类型的生命周期由垃圾回收器管理。即使引用变量超出了作用域只要堆内存中的对象仍然被引用它们就不会被销毁。 final修饰的引用数据类型值可以在构造器中二次修改吗
在Java中final关键字不能修饰一个类只能修饰方法或变量。虽然类也是引用数据类型final可以修饰引用数据类型但是不能修饰类。
final修饰的引用数据类型值可以在构造器中二次修改
例如当final修饰的是引用数据类型如对象或数组时它意味着这个引用本身不能被改变也就是说你不能让final引用指向另一个对象。但是这并不妨碍你修改这个对象的内容。
public class Test {private final User user;public Test(User user) {this.user user;// 这里你不能让user指向另一个User对象// this.user anotherUser; // 这行代码会导致编译错误// 但是你可以修改user的内容user.setName(New Name);}
}class User {private String name;public User(String name) {this.name name;}public void setName(String name) {this.name name;}public String getName() {return name;}
}
jvm内存结构
1.堆区这是Java虚拟机所管理的最大一块内存区域几乎所有的对象实例和数组都将在这里分配内存。堆是垃圾收集器管理的主要区域因此很多时候也被称为“GC堆”。从Java 8开始字符串常量池也移动到了堆中。
2.栈区每个线程在创建时都会创建一个虚拟机栈其生命周期与线程相同。每一个方法执行的时候都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
3.方法区也被称为非堆Non-Heap用于存储已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。虽然Java虚拟机规范把方法区描述为堆的一个逻辑部分但它有一个别名叫做Non-Heap目的是与Java堆区分开来。
4.程序计数器就是写代码旁边显示的多少行当前线程所执行的字节码的行号指示器。
5.本地栈 jvm堆栈区别
堆Heap
堆是JVM中最大的内存区域主要用于存储对象实例和数组。堆是垃圾收集器GC的主要管理区域。当对象不再被引用时垃圾收集器会回收这部分内存。堆中的内存分配是动态的即程序在运行时可以动态地创建和销毁对象。
栈Stack
栈是线程私有的每个线程都有一个自己的栈。栈用于存储方法的执行信息包括局部变量表、操作数栈、动态链接等。栈的大小是固定的每个线程的栈深度由JVM决定。栈的生命周期与线程相同当线程结束时栈也会销毁。
set能不能存null 首先先明确hashSet是基于hashMap实现的又要明确hashMap和hashTable的区别
hashMap线程不安全hashTable线程安全其实现方法里面都添加了synchronized关键字来确保线程同步。
hashMap可以使用null作为keyhashTable不允许null作为key因此结合上述hashSet是基于hashMap实现的所以hashSet可以使用null作为key
索引过多对操作有什么影响
索引提高检索效率降低排序成本索引对应的字段有自动排序的功能默认升序
缺点
1.创建和维护索引需要耗时并且随着数据量的增加而增加
2.索引需要占用物理空间随数据量增加而增加
3.降低表的增删改的效率每次增删改索引都需要进行动态维护
索引的适用场景较为频繁的作为查询条件的字段
不适用的场景
1.字段值的唯一性太差不适合做索引即该字段的数据太多重复就不适合做索引
2.更新非常频繁的字段
3.不会作为查询条件不会出现在where语句不适合做索引
concurrentmap