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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 李慧声 于 2013-4-30 09:50 编辑

                 String str1 = "abc";
                Class cls1 = str1.getClass();
                Class cls2 = String.class;
                Class cls3 = Class.forName("java.lang.String");
                System.out.println(cls1 == cls2);
                System.out.println(cls2 == cls3);

为啥两个都是true呢?张老师的听的不大懂,求通俗的解释,谢谢!

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

14 个回复

正序浏览
class类的字节码文件就是硬盘上文件目录的*.class文件,加载该文件到内存,只存在一个该文件的对象(且类的加载再起生命周期中只有一次),不同的调用方式调用的还是同一个对象。
回复 使用道具 举报
只有一份String.class在内存中.........
回复 使用道具 举报
Sword 发表于 2013-4-30 01:36
得到各个字节码对应的实例对象有三种方式( Class类型)
一,类名.class,例如, String.class
二,对象.ge ...

嗯嗯 这个比较给力
回复 使用道具 举报
伊廷文 发表于 2013-4-29 21:01
java中只有一个String类或者说只有一个String字节码,所以他们用的都是用的这个字节码,所以是true啊 ...

嗯嗯 解决了
回复 使用道具 举报
杨同旺 发表于 2013-4-29 20:51
String是一个类,"abc"只是String类的一个对象,

如果想使用类和对象,必须把这个类加载到内存中去,

嗯嗯 解决了
是该String类只在内存中加载一次 所以对应的String字节码只有一份 然后去引用创建的话 结果都是一样的
谢谢啊
回复 使用道具 举报
任江峰 发表于 2013-4-29 20:46
这里比较的是他们的类型,cls1,cls2,cls3的类型都是String,只是用不同的方法获取的。
所以他们比较的结果 ...

恩 有道理
回复 使用道具 举报
cowthan 发表于 2013-4-29 20:13
这都是java.lang.String对应的Class对象,当你运行这个程序时,你觉得你的系统能载入几个java.lang.String ...

解决问题了 谢谢
回复 使用道具 举报
董维明 发表于 2013-4-29 20:10
因为java中只有一个String类,,而你获取的是String类型的 字节码,无论你创建多少String对象,,其指向的  ...

哦 对哦 学习了 呵呵
回复 使用道具 举报
Sword 金牌黑马 2013-4-30 01:36:46
7#
得到各个字节码对应的实例对象有三种方式( Class类型)
一,类名.class,例如, String.class
二,对象.getClass(),例如,str1.getClass()
三,Class.forName("类名"),例如,Class.forName("java.util.String");

又因为String类的对象只会对应一个String的字节码文件,
String类的字节码文件也只有一个,
所以你通过这三种方式也只会得到同一个字节码文件

类的对象却可以在内存中生成多个.
回复 使用道具 举报
java中只有一个String类或者说只有一个String字节码,所以他们用的都是用的这个字节码,所以是true啊

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
String是一个类,"abc"只是String类的一个对象,

如果想使用类和对象,必须把这个类加载到内存中去,

无论怎么使用,类只会被加载一次,

所以很多String类的对象只会对应一个String的字节码文件,String类的字节码文件也只有一个,通过什么方式也只会得到这一个,

类的对象却可以在内存中生成多个.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这里比较的是他们的类型,cls1,cls2,cls3的类型都是String,只是用不同的方法获取的。
所以他们比较的结果是true.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
这都是java.lang.String对应的Class对象,当你运行这个程序时,你觉得你的系统能载入几个java.lang.String?
当然就一个啊,所以只要是java.lang.String对Class对象,不管你是通过什么手段获得的,都是同一个

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
因为java中只有一个String类,,而你获取的是String类型的 字节码,无论你创建多少String对象,,其指向的 永远都是同一个String.class文件,,,所以就相等咯

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马