本文共 492 字,大约阅读时间需要 1 分钟。
先来个面试题吧
面试题一String a = "ab";String b = "a" + "b";sysout(a==b)答案是true还是false呢?我们来一起分析一下这个过程a变量创建时,会在常量池中开辟一块空间存放ab,然后将空间地址赋值给a;b变量创建时,编译器会自动将+的结果运算出来,相当于b == "ab",此时JVM会先判断常量池中是否存在,直接将该对象的地址引用赋值给b变量,因此a跟b都是指向的常量池中的同一块地址,所以答案是true。面试题二String a = "ab";String b = new String("ab");sysout(a==b)a变量的创建跟上一题一样b使用new String(str)方式创建字符串时,如果常量池中存在,则拷贝一份放到堆中,并将堆中的地址指向b;如果常量池中不存在,则新建一份放到常量池中,并拷贝一份放到堆里,并将堆里的地址指向b。所以a字符串在常量池中的值跟b所指向的不是同一份,答案为false。转载于:https://blog.51cto.com/14380904/2406261