免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: 大马虎
打印 上一主题 下一主题

java的判断对象相等的两个问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-04-08 13:24 |只看该作者
从本质上阐述清楚了,我看没有人再去争论了

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
32 [报告]
发表于 2006-04-10 16:59 |只看该作者
每次申请一个String都是指向了不同的地址。

论坛徽章:
0
33 [报告]
发表于 2006-04-17 01:24 |只看该作者
建议楼主买一本书叫作 java puzzel 的

论坛徽章:
0
34 [报告]
发表于 2006-04-28 14:27 |只看该作者
原帖由 大马虎 于 2006-4-5 08:53 发表

String a="Hello World!";
String b="Hello World!";
a=b?  a和b是否相等 ? 为什么?

String a=new String("Hello World!";
String b="Hello World!&q ...


如果== 操作符的两边是对象,其比较的是两个对象的引用。换句话说,就是测试这两个变量是不是指向同一个地址。
要比较两个对象是否相等,要使用equals()方法(如果这个对象是你自己写的,你应该覆盖这个方法)。

但是,java里对String又有特殊的出处理。
如果你用
String a="Hello World!";
String b="Hello World!";
这样的方法声明的String系统会自动吧a 和 b 指向同一个位置。
用String a=new String("Hello World!"; 声明的String则按照一般的对象处理。

论坛徽章:
0
35 [报告]
发表于 2006-05-01 17:22 |只看该作者
..............

论坛徽章:
0
36 [报告]
发表于 2006-05-02 10:57 |只看该作者
当然不一样!你这是在比较两个对象,而不是两个对象的值

论坛徽章:
0
37 [报告]
发表于 2006-05-04 02:11 |只看该作者
呵呵。基础的java问题,看看String的特殊点介绍部分。就都回自己明白了。

论坛徽章:
0
38 [报告]
发表于 2006-05-04 17:45 |只看该作者
// String share = "Hello"; // sharing way;
// String selfish = new String ("Hello" ); // selfish way;



public class tryString {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                String a = "Hello";
                String b = "Hello";
                String c = new String ("Hello" );// this guy do not share "Hello" with
                                                                // friends born earlier or later than himself
                String d = new String ("Hello!" );
                String e = "Hello";
                String f = "Hello!";  // the JV CAN rEcOgnIsE that d is born in that selfish
                                                        // a way that d will not share "Hello!" with f, so
                                                        // f have to create a new "Hello!" himself.
                System.out.println(b==a);
                System.out.println(c==a);
                System.out.println(e==a);
                System.out.println(e==c);
               
                System.out.println(f==d);
        }

}


OUTPUT:

true
false
true
false
false

论坛徽章:
0
39 [报告]
发表于 2006-09-27 18:01 |只看该作者
这样写更清楚一些:


  1.   public static void testEquals() throws Exception {
  2.     真命题( "abc" == "abc" );
  3.     注意了( "abc" == "a" + "bc" );

  4.     String a = "abc";
  5.     String b = "abc";
  6.     注意了( a == b );
  7.     b = "a" + "bc";
  8.     注意了( a == b );

  9.     a = new String("abc");
  10.     b = new String("abc");
  11.     注意了( a != b );
  12.     真命题( a.equals(b) );
  13.     真命题( a.intern() == b.intern() );
  14.   }

  15.   public static final void fail(String message)
  16.    {throw new RuntimeException(message);}
  17.   public static final void 真命题(boolean b)
  18.    {if (!b) fail("真命题为假");}
  19.   public static final void 注意了(boolean b)
  20.    {if (!b) fail("注意:真命题为假");}
复制代码

论坛徽章:
0
40 [报告]
发表于 2006-09-27 20:53 |只看该作者
public static final void 来来,我是一个方法,法法法法法法,法法法法法法法法法() {
    System.out.println("毛主席教导我们:把问题研究透彻");
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP