public void test(){
Couse i = new Course();
Couse b = new Course("1","2");
System.out.println(i.equals(b));
System.out.println(i.name);
}
public static void main(String[] args){
Equels s = new Equels();
s.test();
}
运行结果为;false null
i为空 可以调用方法呀!有什么问题呢
你在调用方法前先写一句 i=null; 你就知道怎么回事了
楼上说的是,Couse i = new Course();这句话,实际上是创建了一个Course对象,内存中开辟了空间来放它,然后i是对这个对象的引用。
所以,它并不是空(null),而是一个对象(的引用)。
老师说,null不能调用equals方法,为什么呢?
如果想调用一个方法,你得先有个对象吧。但是null并不是一个对象,内存中都没它的空间。所以无法调用方法。
就像楼上说的,可以打个比方,
对象相当于一个盒子,方法可以理解为盒子里的东西。
但是null它连盒子都没有,就更没有盒子里的东西了。
不是那样的,在你用Couse i = new Course();创建了一个Course对象,其中i是这个对象的引用,虽然你没有赋值,但是系统会加上默认值,也就是说此时 i 引用的对象中,id==0, name==null,所以这个 i 引用的不是空对象。
其实我觉得可以这样理解,Couse i = new Course(); 就相当于创建了一个盒子,但是盒子里什么东西都没有;而null就相当于连盒子都没有。
Java 语言规范
虽然 true 和 false 看上去似乎是个关键字,但是他们在技术上而言是属于布尔的字面值类似地,null 看上去也像个关键字,但从技术上而言其是一个表示空的字面值。不是对象,是对象的都继承类Object
不是啊,任何类都可以调用equals方法,因为equals是Object类里面的方法,而Object类是所有类的根类,任何类其实都是继承Object类
Couse i = new Course(); 这个不是null,i是一个没有赋值的对象,应为Couse b = new Course("1","2");这个说明Couse有两个构造函数,一个是空的 还有一个是public Couse(String a, String b ){...},这个构造函数给你变量也赋值类。所以b.属性是会有值得。