黑马程序员技术交流社区
标题:
Class类问题
[打印本页]
作者:
公子-醉香
时间:
2013-12-15 11:53
标题:
Class类问题
public class ClassTest {
public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException{
// TODO Auto-generated method stub
String s1="abc";
Class c1=s1.getClass();
Class c2=String.class;
Class c3=Class.forName("java.lang.String");
System.out.println("------------------");
System.out.println("c1与c2是否是同一个对象"+(c1==c2));
System.out.println("c1与c3是否是同一个对象"+(c1==c3));
System.out.println("------------------");
//问题:1.上面的代码首先创建了一个字符串变量s1,然后具体的是怎么比较三份字节码是否指向同一个对象的?
// 2.为什么要用throws关键字,而不使用try{}catch(..){};?
}
}
复制代码
作者:
发哥-阿花
时间:
2013-12-15 12:13
本帖最后由 发哥-阿花 于 2013-12-15 12:16 编辑
主函数使用throws是把异常抛给虚拟机,让虚拟机去处理;意为“我不管了,JVM看着办吧”,,我是这么理解的。
在Object类源码中是这样写的。
public boolean equals(Object obj) {
return (this == obj);
}
复制代码
判断字节码是否是同一个是调用Object中的equals方法判断的,Class类中并没有重写这个方法;
作者:
Diaraelo
时间:
2013-12-15 13:16
本帖最后由 Diaraelo 于 2013-12-15 13:24 编辑
因为String 类对象被建立后都会拥有String类的字节码对象,getCLass(),String.class这些都只是取出了String这个类的字节码对象,就想当于判断这个东西属不属于这个类的标记。如果要比较类中数据相不相同是要调用equals
public class T1 {
public static void main(String[] args) throws ClassNotFoundException,InstantiationException,IllegalAccessException{
// TODO Auto-generated method stub
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1);
System.out.println(s2);
System.out.println(s1.equals(s2)); //判断其内容相同都是abc返回true
System.out.println(s1.getClass()==s2.getClass());//都是String 类的字节码对象所以返回true
System.out.println(s1==s2); //2个不同对象地址值不同返回flase
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2