黑马程序员技术交流社区

标题: (哈尔滨校区)java基础.常用API.String类难题 [打印本页]

作者: ZONGYUTONG91    时间: 2016-4-20 23:09
标题: (哈尔滨校区)java基础.常用API.String类难题
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()比较的是字符串的内容




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2