Day11面试题答案

谁说胖子不能爱 提交于 2020-02-26 10:22:38

1.判断定义为String类型的s1和s2是否相等  
String s1 = “abc”;                            //常量池中没有这个字符串对象,就创建一个,如果有直接 用即可
String s2 = “abc”;                            //意思就是 常量池中已经创建了对象s1 的 值abc,s2直接拿来用就行了!
System.out.println(s1 == s2);           //true
System.out.println(s1.equals(s2));    //true


2.下面这句话在内存中创建了几个对象?
String s1 = new String("abc");    //创建二个对象,一个在常量池,一个在堆内存

//现在常量池中创建“abc”,然后new String 进堆,将常量池中的“abc”赋给堆。二者的地址值不同。也就是说new的对象是常量池中的abc的副本。


3.判断定义为String类型的s1和s2是否相等
String s1 = new String("abc");·         //记录的是堆内存对象的地址值
String s2 = “abc”;                          //记录的是常量池的地址值
System.out.println(s1 == s2);            //s1的abc进入的是堆内存,s2进入的是常量池,结果为false
System.out.println(s1.equals(s2));     //equals()比较的是字符串序列或里面的内容,结果为true


4.判断定义为String类型的s1和s2是否相等
String s1 = "a" + "b" +“c”;//相当于 byte =3 + 4;内存自动加好,变成7。也就是说s1 = abc。常量优化机制
String s2 = “abc”;    //s1已经在常量池中创建了s1,s2直接拿来用就行了!记录的是同一个地址值!
System.out.println(s1 == s2);               //true,java中有常量优化机制
System.out.println(s1.equals(s2));        //true


5.判断定义为String类型的s1和s2是否相等
String s1 = “ab”;//在常量池中创建“ab”
String s2 = “abc”;//在常量池中创建“abc”
String s3 = s1 + “c”;//串联先在堆内存中创建StringBuffer,通过append方法将s1 与 c相加,再调用toString转换成String 字符串“abc”;地址值完全不同。StringBuffer地址值1,toString地址值2.   s2在常量池中的地址值不同与toString地址值2
System.out.println(s3 == s2);//false
System.out.println(s3.equals(s2));//true

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!