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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 公子-醉香 中级黑马   /  2013-12-15 11:53  /  1373 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class ClassTest {
  2.         public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException{
  3.                 // TODO Auto-generated method stub
  4.                         String s1="abc";
  5.                         Class c1=s1.getClass();
  6.                         Class c2=String.class;
  7.                         Class c3=Class.forName("java.lang.String");
  8.                         System.out.println("------------------");
  9.                         System.out.println("c1与c2是否是同一个对象"+(c1==c2));
  10.                         System.out.println("c1与c3是否是同一个对象"+(c1==c3));
  11.                         System.out.println("------------------");
  12.                         //问题:1.上面的代码首先创建了一个字符串变量s1,然后具体的是怎么比较三份字节码是否指向同一个对象的?
  13.                         //                2.为什么要用throws关键字,而不使用try{}catch(..){};?
  14.         }

  15. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

2 个回复

倒序浏览
本帖最后由 发哥-阿花 于 2013-12-15 12:16 编辑

主函数使用throws是把异常抛给虚拟机,让虚拟机去处理;意为“我不管了,JVM看着办吧”,,我是这么理解的。
  1. 在Object类源码中是这样写的。
  2. public boolean equals(Object obj) {
  3. return (this == obj);
  4. }
复制代码


判断字节码是否是同一个是调用Object中的equals方法判断的,Class类中并没有重写这个方法;

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Diaraelo 于 2013-12-15 13:24 编辑

因为String 类对象被建立后都会拥有String类的字节码对象,getCLass(),String.class这些都只是取出了String这个类的字节码对象,就想当于判断这个东西属不属于这个类的标记。如果要比较类中数据相不相同是要调用equals
  1. public class T1 {
  2. public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException{
  3. // TODO Auto-generated method stub
  4. String s1 = "abc";
  5. String s2 = new String("abc");
  6. System.out.println(s1);
  7. System.out.println(s2);
  8. System.out.println(s1.equals(s2)); //判断其内容相同都是abc返回true
  9. System.out.println(s1.getClass()==s2.getClass());//都是String 类的字节码对象所以返回true
  10. System.out.println(s1==s2); //2个不同对象地址值不同返回flase

  11. }

  12. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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