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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 舞动炫龙 中级黑马   /  2016-1-21 13:32  /  4561 人查看  /  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 个回复

倒序浏览
我来捡漏的
回复 使用道具 举报
挺好  谢谢了亲 辛苦辛苦  点个赞
回复 使用道具 举报
学习了,以后详细看
回复 使用道具 举报
嗯,学过了
回复 使用道具 举报

谢谢捧场
回复 使用道具 举报
漂亮,楼主幸苦
回复 使用道具 举报
长知识了,谢谢
回复 使用道具 举报
讲的很详细
回复 使用道具 举报
很棒很棒
回复 使用道具 举报
可以可以,楼主辛苦了。又学到知识。。哈哈
回复 使用道具 举报
楼主辛苦。打了这么多字。
回复 使用道具 举报
肩特曼 发表于 2016-1-21 20:27
挺好  谢谢了亲 辛苦辛苦  点个赞

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

一起学习
回复 使用道具 举报
qq852919300 发表于 2016-1-22 13:35
可以可以,楼主辛苦了。又学到知识。。哈哈

谢谢捧场
回复 使用道具 举报
给力 !!!
回复 使用道具 举报
学了都忘记了,来补补。、、
回复 使用道具 举报
学习了,楼主辛苦
回复 使用道具 举报
知道了,谢谢告诉,会重点看一下
回复 使用道具 举报
suihaixia54 发表于 2016-1-23 21:07
知道了,谢谢告诉,会重点看一下

谢谢捧场
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马