字节码指令
加载与存储指令 public int add(int a, int b) { int res = a + b; return res; } 字节码指令 public int add(int, int); descriptor: (II)I flags: (0x0001) ACC_PUBLIC Code: stack=2,...
加载与存储指令 public int add(int a, int b) { int res = a + b; return res; } 字节码指令 public int add(int, int); descriptor: (II)I flags: (0x0001) ACC_PUBLIC Code: stack=2,...
Java 的源码文件经过编译器编译后会生成字节码文件,然后由 JVM 的类加载器进行加载,再交给执行引擎执行。在执行过程中,JVM 会划出一块内存空间来存储程序执行期间所需要用到的数据,这块空间一般被称为==运行时数据区==。 ==栈帧==(Stack Frame)是运行时数据区中用于支持虚拟机进行方法调用和方法执行的数据结构。每一个方法从调用开始到执行完成,都对应着一个...
javap 字节码的基本信息 public class Test { private int age = 10; public int getAge() { return age; } } 在 class 文件的同级目录下输入命令 javap -v -p Test.class 来查看一下输出的内容 // 字节码文件的位置...
.java源文件 package test.JVM; public class Test { public static void main(String[] args) { System.out.println("haha"); } } 十六进制查看.class文件 魔数 第一行中有一串特殊的字符 CAFEBABE,它就是一个魔...
checked和unchecked异常 checked 异常(检查型异常)在源代码里必须显式地捕获或者抛出,否则编译器会提示你进行相应的操作;而 unchecked 异常(非检查型异常)就是所谓的运行时异常,通常是可以通过编码进行规避的,并不需要显式地捕获或者抛出。 NoClassDefFoundError:程序在编译时可以找到所依赖的类,但是在运行时找不到指定的...
StringBuilder的append() String s1 = "ha"; String s2 = "xi"; // 编译的时候被替换成 new StringBuilder(s1).append(s2).toString(); System.out.println(s1 + s2); String s1 = "ha"; // +号也被编译成了append() String s2 ...
public final class StringBuffer extends AbstractStringBuilder implements Serializable, CharSequence { public StringBuffer() { super(16); } public synchronized StringBuffer...
“==”操作符用于比较两个对象的地址是否相等。 .equals() 方法用于比较两个对象的内容是否相等。 String s1 = new String("hh"); String s2 = new String("hh"); // true System.out.println(s1.equals(s2)); // false System.out.println(s1 == s2)...
当调用 intern() 方法时,如果字符串池中已经存在相同内容的字符串,则返回字符串池中的引用;否则,将该字符串添加到字符串池中,并返回对字符串池中的新引用。可以确保所有具有相同内容的字符串共享相同的内存空间 对于任意两个字符串 s 和 t,当且仅当 s.equals(t) 为 true 时,s.intern() == t.intern() 才为 true。 public stat...
new String()创建了几个对象 // 使用new,每次都会创建一个新的对象 String s = new String("hh"); 先在位于堆中的字符串常量池中查找是否已经存在hh字符串对象 如果有,直接在堆中创建一个hh字符串对象,然后把这个堆中新创建的对象地址返回给栈中的变量s 如果没有,现在字符串常量池中创建一个对象,然后再在堆中...