黑马程序员技术交流社区

标题: 下面程序的输出结果是什么 [打印本页]

作者: 1161272014    时间: 2012-7-14 09:52
标题: 下面程序的输出结果是什么
String a="abc";
String b="abc";
System.out.println(a==b);
System.out.println(a.equals(“b”));
作者: 陆强强    时间: 2012-7-14 10:01
去看老毕的day13
作者: 耿立刚    时间: 2012-7-14 10:10
直接代码截图说明:

1.png (15.55 KB, 下载次数: 10)

1.png

2.png (12.93 KB, 下载次数: 12)

2.png

作者: 李思静    时间: 2012-7-14 10:18
。。。这个也太狠了
作者: 张_涛    时间: 2012-7-14 10:19
1.创建String对象的两种方式及区别:
1)String a = "abc";(采用字面值方式赋值):查找String Pool中是否存在"abc"这个对象,如果不存在,则在String Pool中创建一个"abc"对象,然后将String Pool中的这个"abc"对象的地址返回回来,这样a会指向String Pool中的这个"abc"字符串对象;如果存在,则不创建任何对象,直接将String Pool中的这个"abc"对象返回来,赋给a。
2)String b = new String("abc");首先在StringPool中查找有没有"abc"这个对象,如果有,则不在String Pool中再去创建"abc"这个对象,直接在堆中创建一个"abc"字符串对象,然后将堆中的这个"abc"对象返回来,使得b指向了堆中创建的"abc"对象;如果Sting Pool中没有,则先在String Pool中创建一个"abc"字符串对象,再去堆中创建一个"abc"字符串对象,最后返回堆中创建的对象。
2.String类重写了equals方法,其比较的是字符串的内容,代码如下
    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = offset;
                int j = anotherString.offset;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                        return false;
                }
                return true;
            }
        }
3."=="比较的是两个对象在内存中的地址,即两个对象引用是否指向同一个对象。
观察你的代码,你的意图是用判定a、b两个对象引用的equals和==关系。根据第一种字符串对象创建方式可得,均返回true。
作者: 韩伟    时间: 2012-7-14 11:02
额,这种问题自己运行一下就很清楚了啊。




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