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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张猛

初级黑马

  • 黑马币:6

  • 帖子:26

  • 精华:0

© 张猛 初级黑马   /  2012-2-25 21:30  /  1725 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张猛 于 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类型的字节码文件吗?

5 个回复

正序浏览
String.class;这个返回的其实是一个String类字节码在内存中的地址,
而Class cls1,和Class cls2一个声明,他可以用来接收类字节码对象的地址,
Class cls1 = String.class;其实表示的就是把String类字节码的引用赋给了cls1,
所以无论String.class,调用多少遍,都还是同一份字节码
回复 使用道具 举报
本帖最后由 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对象
回复 使用道具 举报
楼主是不知道String.class的真正含义吧
回复 使用道具 举报
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自然也是相等的。
回复 使用道具 举报
Class cls1 = String.class;
Class cls2 = String.class;
这两段代码是获取的都是class java.lang.String这个类,所以结果相等,就好像你用
Class cls1 = s1.getClass();
Class cls2 = s2.getClass();
这两个还是相等的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马