码迷,mamicode.com
首页 > 其他好文 > 详细

String类知识点整理

时间:2019-06-08 09:11:44      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:拷贝   str   地址   分析   自动   als   编译   字符串   知识点整理   

先来个面试题吧
面试题一
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类知识点整理

标签:拷贝   str   地址   分析   自动   als   编译   字符串   知识点整理   

原文地址:https://blog.51cto.com/14380904/2406261

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!