黑马程序员技术交流社区

标题: Class类的问题 [打印本页]

作者: 张猛    时间: 2012-2-25 21:30
标题: Class类的问题
本帖最后由 张猛 于 2012-2-26 10:05 编辑

String s1 = "abc";
String s2 = "efg";
Class cls1 = String.class;
Class cls2 = String.class;
System.out.println(cls1 == cls2);


结果是true,难道在内存中是同一个String类型的字节码文件吗?
作者: 杨盼    时间: 2012-2-25 21:51
Class cls1 = String.class;
Class cls2 = String.class;
这两段代码是获取的都是class java.lang.String这个类,所以结果相等,就好像你用
Class cls1 = s1.getClass();
Class cls2 = s2.getClass();
这两个还是相等的
作者: dangfei    时间: 2012-2-25 22:45
Class cls1 = String.class;
Class cls2 = String.class;

---------------------------------
cls1 和cls2 都是String.class,得到的当然都是String的字节码,他如果不等那就是sun错了。

估计楼主是想问
Class cls1 = s1.getClass();
Class cls2 = s2.getClass();
这个,s1和s2都是通过String字节码创建出来的,他们的class自然也是相等的。
作者: 泮和顺    时间: 2012-2-25 23:03
楼主是不知道String.class的真正含义吧

作者: H07000223    时间: 2012-2-26 00:16
本帖最后由 H07000223 于 2012-2-26 00:16 编辑

Class cls1 = String.class;
Class cls2 = String.class;
System.out.println(cls1 == cls2);

这个必须等啊~~~String.class是java内置的表示java.lang.String类型的Class对象

这种Class对象是惟一的,也就是不管你是"a".getClass()还是"b".getClass()

只要是String类型的对象.getClass()最终获得的都是String.class这个Class对象
作者: 朱皓    时间: 2012-2-26 08:23
String.class;这个返回的其实是一个String类字节码在内存中的地址,
而Class cls1,和Class cls2一个声明,他可以用来接收类字节码对象的地址,
Class cls1 = String.class;其实表示的就是把String类字节码的引用赋给了cls1,
所以无论String.class,调用多少遍,都还是同一份字节码




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