(先确定你下次看到这问题就知道选什么,再去看下面的解释,不要舍本逐末,否则下次看见这个选择题还是不会,这题你会遇上个十几遍,先把答案记住了比什么都强,加油,宝贝,先记住答案,先记住答案,先记住答案,重要的事说三遍!!!!!) (1) String s1 = "abc"; String s2 = "abc"; if(s1==s2){ Log.e("aaa","yes"); }else{ Log.e("aaa","no"); } -------------------------------------------------------------------------------------------------------------------------------- 输出结果是yes(不解释) -------------------------------------------------------------------------------------------------------------------------------------- (2) String s1 = "abc"; String s2 = new String(s1); if(s1==s2){ Log.e("aaa","yes"); }else{ Log.e("aaa","no"); } Log.e("aaa",s1+"--"+s2); -------------------------------------------------------------------------------------------------------------------------------- 输出结果是no abc--abc 哈哈,Java 版最为经久不衰的问题 堆与栈的区别 栈,用来存取基本类型数据和一些对象的引用。 堆,用来存取new出来的对象或数组。 String s1 = new String("abc");是在堆中生成; String s2 = "abc";是直接在字符串池中查找得到; 字符串常量池也是在堆内存中的 在JDK5.0中,java虚拟机在启动的时候会实例化9个对象池,这九个对象池分别用来存贮8种基本类型的包装类对象和String对象。当在程序中直 接用""括起来一个字符串时,JVM就到Sring对象池里面去找看是否有一值相同的对象,如果有,就拿现成的对象,如果没有,则JVM在堆中创建对象并 把它放进对象池中,并返回。 如果采用new的方式就是直接在堆中创建对象,JVM不会主动把它放进对象池中。 String对象池就是字符串常量池 -------------------------------------------------------------------------------------------------------------------------------------- 再次提醒,一定要先背答案!!!!!!!!!!! |
|
来自: 一戒745zia4sgs > 《职场智慧》