概念
Java特点
- 跨平台
- 面向对象
- 内存管理
Java的优劣势
- 优势:跨平台/生态系统/面向对象/内存管理/多线程/安全模型
- 劣势:编译开销/语法繁琐/内存消耗
Java跨平台原因
- Java首先被编译成.class(字节码文件)
- JVM将字节码翻译成机器码
JVM、JDK、JRE三者关系
- JVM:运行环境。注:将字节码直接映射到本地的cpu指令集和OS的系统调用,所以屏蔽了与操作系统相关的信息
- JDK:开发工具包
- JRE:JVM+Java类库
Java解释和编译都有
- 解释:JVM方法调用计数器,当累计计数大于一定值的时候,使用JIT编译成机器码,否则就是用解释器进行解释执行
- 编译:源代码被编译成字节码,JIT会被那编译过的机器码保存起来
解释型语言和编译型语言区别
- 编译型语言:源代码被编译成机器码或是字节码,生成可执行文件。
- 解释型语言:逐行解释执行源代码,不生产独立的可执行文件。在执行程序时同时进行翻译
值传递和引用传递
- 值传递:传递实际值的副本
- 引用传递:实际上是伪概念,更改指向同一个对象的内部数据
数据类型
基本的数据类型
- 数值型:整型(byte short int long)、浮点型(float double)
- 字符型:char
- 布尔型:boolean
类型互转出现的问题
- 数据向上转一般是安全的
- 出现的问题1.数值溢出
- 出现的问题2.精度丢失
为什么要使用bigDecimal而不是double进行运算
- double是使用二进制来进行的浮点运算,二进制不能精确的表示小数,比如说1/3
- bigDecimal则是可以进行精确计算
装箱和拆箱
- 将数据类型和对应的包装类进行转换的过程
- 弊端:频繁的自动装箱操作可能会影响到程序的性能
Java中的Integer和int
Integer
- 优势:泛型中的应用/转换中的应用/集合中的应用
- 是一种引用类型,需要实例化对象,就必须为对象分配内存
- 初始化为null,如果没有进行实例化,就会导致空指针异常
- 缓存:在Integer内部有一个静态的缓存池,用于存储特定范围内的整数值对应的Integer对象
int
- 作为基本数据类型,在对应的内存块进行直接的数据存储,读写效率要比包装类更高
- 而且在64位的JVM上,在开启引用压缩的情况下,一个Integer对象要占用16个字节的内存空间,一个int只占用4个字节,存储效率也更高