先来个面试题吧 面试题一 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。
String类知识点整理
原创
©著作权归作者所有:来自51CTO博客作者nuli08的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
[嵌入式软件设计师】知识点整理(1)
嵌入式软件设计师备考知识点总结
地址总线 嵌入式软件备考 -
Launcher知识点整理
一、增加墙纸图片放入/packages/apps/Launcher2/res/drawable-mdpi/packages/apps/Launcher2/res/values-mdpi/wallpapers.xml
android velocity menu layout button -
Zookeeper知识点整理
zk
zookeeper zk -
React 知识点整理
React 知识点整理
react.js javascript Vue 数据 ide -
Git 知识点整理
1. Git基本概念。repositoryconfiginitclonefetchpullcommitpushbranc
git java linux python 数据库