黑马程序员技术交流社区

标题: 黑马训练营入学考试,求解 [打印本页]

作者: anhuicuihao    时间: 2015-4-23 00:29
标题: 黑马训练营入学考试,求解
编译并运行以下代码将发生什么?(  ) class MyClass {  int x;  
MyClass(int i) {   x = i;  }
  public static void main(String args[]) {   
MyClass m1 = new MyClass(100);  
MyClass m2 = new MyClass(100);
  if (m1.equals(m2)) {   
System.out.println("Both are equal");   }
else {     System.out.println("Both are not equal");   }
}
}  A. 代码编译时报出错误提示信息“equals() 方法未定义”  B. 编译通过,抛出运行期异常. C. 输出Both are equal. D. 输出Both are not equal

作者: godrick007    时间: 2015-4-23 08:25
答案选d
Both are not equal
类是引用型数据变量,在栈内存中存储的是对象的地址值,而不是具体的数值。
在这个程序中,虽然m1和m2都把100这个int类型的值传给了MyClass这个类的构造函数,但是
在if语句中比较的并不是两个int型的100,而是m1 和 m2的地址值。


MyClass m1 = new MyClass(100);  
MyClass m2 = new MyClass(100);

这两句后面加上
        System.out.println(m1);
        System.out.println(m2);

之后,程序运行的结果是:


这样你就更清晰的明白if语句中的m1和m2到底是什么了

作者: 只吃饭不洗碗    时间: 2015-4-23 08:35
楼上正解




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