学习目标:
- Java面试题
- MySQL面试题
- Redis面试题
学习内容:
2024-01-22:
-
JDK、JRE、JVM的区别
-
hashCode与equals之间的关系
-
String、StringBuffer、StringBuilder的区别
具体内容:
JDK、JRE、JVM的区别
概念
JDK,Java标准开发包,提供了编译、运行Java所需的各种工具和资源,包括编译器、运行时环境以及Java类库
JRE,Java运行环境,用于运行Java的字节码文件。包含了JVM以及JVM所需的类库。
注:普通用户只需要JRE来运行Java程序,开发这必须安装JDK来编译、调试程序
JVM,Java虚拟机,是JRE的一部分,是整个Java跨平台最核心的部分,负责运行字节码文件
执行流程
Java代码->编译器Javac(编译)->字节码->执行字节码程序JVM(Java虚拟机)执行
使用场景
开发:开发程序需要JDK编译源文件
运行:运行已编译好的Java字节码文件(*.class文件),只需要JRE
JVM在执行Java字节码时候会把字节码解释为机器指令,不同操作系统的机器指令不同,运行在上面的JVM也是不同的,不管什么代码,只要编译后是Java字节码,那它就能在JVM上运行;
注:JDK包含JRE,JRE包含JVM
hashCode与equals
概念
hashCode:返回的是对象对应的内存地址
equals:比较两个对象的引用是否是同一个内存地址
equals与==的区别
Java类型区分为基础数据类型和引用基础类型。基础类型(byte, short, int , long , float , double , boolean , char)
基础类型:比较两个值是否相等
引用类型:比较所指向的对象内存地址
总结:
- 若==两侧都是基础数据类型,判断左右两边数据的值是否相等
- 若==左右两边都为引用数据类型,则判断左右两边对象的内存地址是否相同,若相同则一定是同一个对象
- equals默认比较的是两个对象的内存地址,在没有重写equals的情况下,与==比较结果相同
- equals用于比较引用类型是否相等,满足equals判断规则的前提下,两个对象只要规定的属性相同就认为两个对象是相同的
hashCode
hash算法是通过特定的数学函数运算或其他算法,转换为相应的数据存储地址。
hashCode包含了hash算法。
hashCode和equals的关系
总结:
- 调用equals返回了true的两个对象必须有相等的hashCode
- 如果两个对象的hashCode返回值相同,但是调用他们的equals不一定返回ture
String、StringBuffer、StringBuilder的区别
String:常量,值不可变,重新赋值只是把字符串地址变更为新的地址
StringBuffer:变量,线程安全
StringBuilder:变量,线程不安全