Animal animal = new Animal()究竟哪个是对象


前言:在上课时被老师提问过一次,把这个记下来。


Animal animal = new Animal()中,对象是animal 还是new Animal()呢?

public class Animal {
	private String name;
	private String cry;

	public Animal(String name, String cry) {
		this.name = name;
		this.cry = cry;
	}

	public String toString() {
		return name + cry;
	}

	public static void main(String[] args) {
		Animal animal = new Animal("小狗", "汪汪叫");
		System.out.println(animal);
	}
}

上述代码结果:小狗汪汪叫


我们假如animal是对象

public static void main(String[] args) {
		Animal animal;
		System.out.println(animal);
	}

编译时会报animal没有实例化的错误

我们接着往下看


//①
Animal animal = new Animal("小狗", "汪汪叫");
System.out.println(animal);
//②
System.out.println(new Animal("小狗", "汪汪叫"));

①和②两个代码的效果是一样的。

到这里,我们大概可以感觉到,animal其实是一个Animal类型的变量,而new Animal()才是真正的对象,主方法执行new Animal()时,会在堆中开辟一个储存空间,我们假设那个存储空间的地址为0x1234,我们只是将对象在堆中的地址(即0x1234)赋给animal变量,让变量通过该地址去引用该对象罢了,这样我们就可以通过变量去调用对象的方法了。

图解如下:

一个正在学习的大二学生,若有错误请大家指正,感谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhou22-codeWalker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值