让你的JVM更加强大
我们现在把这些东西研究得这么细,对于我们后面学习JVM的编译系统是非常有帮助的
关系运算符 重点讲

C语言是如何做关系运算的
一、int比较
特殊指令
代码顺序影响指令生成
二、与0做比较
三、其他数据类型的比较
四、引用类型比较
1、正常情况
public class IfNull {public static void test() {Object o1 = new Object();Object o2 = new Object();System.out.println(o1 == o2);}}
1、JVM如何判断是否为null
专属指令
专属指令的好处:节省栈空间
public class IfNull {public static void ifNull() {Object obj = null;if (null == obj) {System.out.println("null");} else {System.out.println("not null");}}public static void ifNonNull() {Object obj = null;if (null != obj) {System.out.println("null");} else {System.out.println("not null");}}}
2、专属指令受代码顺序的影响
public class IfNull {public static void main(String[] args) {Object obj = null;System.out.println(obj == null);System.out.println(null == obj);}}
逻辑运算符 重点讲

增强for循环 重点讲
通过这个案例也能让大家知晓数组是如何实现的
public static void test2() {byte[] arr = {1, 2};for (byte b: arr) {System.out.println(b);}}0 iconst_21、将2压入操作数栈(数组长度)1 newarray 8 (byte)1、创建基本类型的数组(8是数组元素类型)2、将数组对象指针压入栈3 dup1、复制栈顶元素2、再次压入栈4 iconst_01、将0压入栈(第一个元素的index)5 iconst_11、将1压入栈(第一个元素的value)6 bastore1、完成数组index=0的元素赋值1会取出栈顶的三个Slot这步执行完栈中只剩数组对象指针7 dup8 iconst_19 iconst_210 bastore1、完成数组index=1的元素赋值2会取出栈顶的三个Slot这步执行完栈中只剩数组对象指针11 astore_01、pop出栈顶元素2、赋值给局部变量表中index=0的位置12 aload_01、取出局部变量表中index=0位置的元素(数组指针)2、压入栈13 astore_11、pop出栈顶元素2、赋值给局部变量表中index=1的位置14 aload_11、取出局部变量表中index=1位置的元素(数组指针)2、压入栈15 arraylength1、取出栈顶元素2、压入栈16 istore_21、取出栈顶元素(数组长度)2、存储到局部变量表中index=2的位置17 iconst_01、将0压入操作数栈18 istore_31、取出栈顶元素2、存储到局部变量表中index=3的位置19 iload_31、取出局部变量表中index=3位置的元素(数组的起始index,即0)2、压入栈20 iload_21、取出局部变量表中index=2位置的元素(数组的长度)2、压入栈21 if_icmpge 43 (+22)1、取出栈顶两个元素进行比较前者大于等于后者时跳转24 aload_11、取出局部变量表中index=1位置的元素(数组指针)2、压入栈25 iload_31、取出局部变量表中index=3位置的元素(数组的访问index)2、压入栈26 baload1、取出数组元素(index=0)2、压入栈27 istore 41、取出栈顶元素(等下要输出的数值)2、存储到局部变量表index=4的位置29 getstatic #3 <java/lang/System.out>32 iload 434 invokevirtual #4 <java/io/PrintStream.println>37 iinc 3 by 140 goto 19 (-21)43 return
堆栈图:https://www.processon.com/view/link/6115dc0ce0b34d0b1a54447a
三目运算符
课堂细讲
循环结构
条件语句
课堂细讲
练习
1、实现课堂上讲到的所有相关指令
2、实现数组、增强for循环
3、让你的JVM支持跨方法调用
