黑马程序员技术交流社区

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

作者: 公子-醉香    时间: 2013-12-15 11:53
标题: Class类问题
  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. }
复制代码



作者: 发哥-阿花    时间: 2013-12-15 12:13
本帖最后由 发哥-阿花 于 2013-12-15 12:16 编辑

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


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

作者: Diaraelo    时间: 2013-12-15 13:16
本帖最后由 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. }
复制代码







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