1:前言:
这里问大家一个问题,这个答案的结果应该是什么?
大家思考三秒钟。。。。。。。。
公布答案了:是true
2:jvm字符串常量池:
string类型本质是对象,如果频繁new一个对象,是十分耗费cpu性能的,那怎么办?
存起来!
抛开常量池的具体细节不讲~
String a = "212";
String b = "212";
创建一个对String类的对象引用变量a,然后通过符号引用去字符串常量池里找有没有”212”,如果没有,则将”212”存放进字符串常量池,并令str2指向”212”,如果已经有”212” 则直接令a指向“212”。“abc”存于常量池在 编译期间完成
。
3:string a="212"和new String(“212”)区别:
用new创建的每new一次
就在堆上创建一个对象,虽然没有再次创建“212”到常量池,但是却是重新创建了一个对象指向常量,所以地址值是不一样的。
结论:
当不new新的对象的时候字符串值相同的话会一直返回true,其他则返回false;