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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.判断定义为String类型的s1和s2是否相等
        String s1 = "abc";
        String s2 = "abc";
        System.out.println(s1 == s2);               
       
        分析:true,因为"abc"在常量池里面,所以 s1 和s2 指向的都是同一个 常量池中的"abc"                                       
       
        System.out.println(s1.equals(s2));        
       
        分析:true, equals()比较的是字符串的内容       
2.下面这句话在内存中创建了几个对象?
        String s1 = new String("abc");
       
        分析:2个 堆中 有一个 常量池中有一个                       
3.判断定义为String类型的s1和s2是否相等
        String s1 = new String("abc");                               
        String s2 = "abc";
        System.out.println(s1 == s2);               
       
        分析:false,s1指向的是堆内存中的对象  s2指向的是常量池中的对象
       
        System.out.println(s1.equals(s2));       
       
        分析: true, equals()比较的是字符串的内容
4.判断定义为String类型的s1和s2是否相等
        String s1 = "a" + "b" + "c";               
        String s2 = "abc";
        System.out.println(s1 == s2);               
       
        分析: true,"a" + "b" + "c"常量相加有常量优化机制,会自动去找常量池中的"abc",如果常量池中有"abc",那就用现成的,如果没有 就在常量池中创建一个"abc",String s2 = "abc"这儿就有一个现成的"abc",所以他俩用的是同一个"abc"
       
        System.out.println(s1.equals(s2));       
       
        分析: true, equals()比较的是字符串的内容
5.判断定义为String类型的s1和s2是否相等
        String s1 = "ab";
        String s2 = "abc";
        String s3 = s1 + "c";
        System.out.println(s3 == s2);               
       
        分析: false, String s3 = s1 + "c";  s1是变量 变量相加 会到堆内存中开辟空间 ,所以 s3指向的是堆内存中的地址,而s2指向的是常量池中的 "abc";
       
        System.out.println(s3.equals(s2));?       
       
        分析: true, equals()比较的是字符串的内容

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马