A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 舞动炫龙 中级黑马   /  2016-1-21 13:32  /  5106 人查看  /  28 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 舞动炫龙 于 2016-1-21 13:31 编辑

1.判断定义为String类型的s1和s2是否相等
     String s1 = "abc";
    String s2 = "abc";
     System.out.println(s1 == s2);         //true               
     System.out.println(s1.equals(s2));     //true
    解释:
    1.String类型的字符串是常量,存储在常量池中,常量池中没有这个字符串对象,就创建一个,如果有直接用即可,所以s1和s2里面存储的是一样的地址
    2.String类中的equals()方法重写了父类的,判断的是相同字符序列的字
        

2.下面这句话在内存中创建了几个对象?
     String s1 = new String("abc");    //创建两个对象,一个在常量池中,一个在堆内存中
     依据:API参考文档:
            public String(String original)
            初始化一个新创建的 String 对象,在堆内存中新创建的字符串对象是该参数字符串的副本。
      解释:
      1.先在常量池中创建"abc",并分配一个地址值(当然要是常量池中有就直接用不在创建)
      2.new String就是在堆内存中创建一个对象,然后把常量池中的"abc"的副本放到了堆内存中的new String中,并把分配的地址值赋值给s1,并且和常量池中的地址不一样     
             

3.判断定义为String类型的s1和s2是否相等
    String s1 = new String("abc");        //记录的是堆内存对象的地址值            
    String s2 = "abc";                             //记录的是常量池中的地址值
    System.out.println(s1 == s2);          //false
    System.out.println(s1.equals(s2));   //true
4.判断定义为String类型的s1和s2是否相等
    String s1 = "a" + "b" + "c";   
        解释:java中有常量优化机制,编译器编译的时候就会使其变成"abc"; 就像byte b = 3+4;  在编译时就变成7,把7赋值给b,常量优化机制
    String s2 = "abc";            
        解释:由于上句就已经在常量池中创建了"abc"了,所以就直接用就行了
    System.out.println(s1 == s2);        //true
    System.out.println(s1.equals(s2));//true
5.判断定义为String类型的s2和s3是否相等
    String s1 = "ab";
    String s2 = "abc";
    String s3 = s1 + "c";
    System.out.println(s3 == s2);            //false
    System.out.println(s3.equals(s2));    //true
        解释:1.s1指向常量池中的"ab";s2指向常量池的"abc";
            2.s1 + "c";字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append方法实现的。字符串转换是通过 toString 方法实现的,该方法由 Object 类定义,并可被 Java 中的所有类继承。也就是说s3里面存储的是堆内存中的地址值
            3.s2记录的是常量池的地址值,s3记录的是堆内存中的地址值,所以是false
            
            

28 个回复

正序浏览
String类的面试题还是要重点掌握的
回复 使用道具 举报
涨姿势了。谢谢啊大神
回复 使用道具 举报
pea 中级黑马 2016-2-8 10:10:48
27#
好详细的笔记,不过好眼熟的样子....这样真的可以吗?
回复 使用道具 举报
学过的了
回复 使用道具 举报
daidiazaiou
回复 使用道具 举报
好熟悉,面试时没问我。。
回复 使用道具 举报

欢迎欢迎
回复 使用道具 举报
顶顶一下
回复 使用道具 举报
加油努力学习
回复 使用道具 举报
suihaixia54 发表于 2016-1-23 21:07
知道了,谢谢告诉,会重点看一下

谢谢捧场
回复 使用道具 举报
知道了,谢谢告诉,会重点看一下
回复 使用道具 举报
学习了,楼主辛苦
回复 使用道具 举报
学了都忘记了,来补补。、、
回复 使用道具 举报
给力 !!!
回复 使用道具 举报
qq852919300 发表于 2016-1-22 13:35
可以可以,楼主辛苦了。又学到知识。。哈哈

谢谢捧场
回复 使用道具 举报
偷懒的猫叔 发表于 2016-1-22 15:29
楼主辛苦。打了这么多字。

一起学习
回复 使用道具 举报
肩特曼 发表于 2016-1-21 20:27
挺好  谢谢了亲 辛苦辛苦  点个赞

谢谢捧场
回复 使用道具 举报
楼主辛苦。打了这么多字。
回复 使用道具 举报
可以可以,楼主辛苦了。又学到知识。。哈哈
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马