引用和对象的区别
引用和对象怎么区分?
"引用"是啥? 是存储对象内存地址的一个变量。
"对象"是啥? 堆内存中new出来的
简单说:
只要这个变量中保存的是一个对象的内存地址,那么这个变量就叫做"引用"
思考: 引用一定是局部变量吗?
不一定,成员变量也可以是一个引用
举例说明:
public class User{
//类 = 属性+ 方法
//以下3个都是属性,都是实例变量(对象变量)
//用户id
//访问id不能这样 User.id(这是错误的,实例变量不能用类名访问。)
//id的访问必须先造对象,然后对象有了,才能访问对象的id
int id;//成员变量又叫做实例变量
//用户名
String username;
//住址
//Address 是一个引用数据类型
//addr是成员变量并且还是一个实例变量
/addr是一个引用
Address addr;
}
public class Address1{
//城市
String city;
//编码
String street;
//邮政编码
String zipcode;
}
public class TestClass {
public static void main(String[] args) {
Address a = new Address();
a.city ="beijing";
a.street ="daxing";
a.zipcode = "12132143";
//用户对象
User u = new User();
System.out.println(u.id);//0
System.out.println(u.username);//null
System.out.println(u.addr); //null
u.id = 12324;
u.username ="zhangsan";
u.addr = a;
//输出zhangsan他是哪个城市的
System.out.println(u.username + "是"+u.addr.city+"城市的");
//拆分成以下代码和上面效果完全一样,原理一样,不同的是代码多了两个变量
// Address ad = u.addr;
// String zhuzhi = ad.city;
// System.out.println(zhuzhi);
}
}
内存图如下
重点突破
int x=100;
= 代表赋值运算,“赋值"中有一个"值”
x变量中的值是100。将100复制一份给y
int y = x;
x表示:将x变量中保存的值100复制一份给y
对照图片尝试理解下面
Address k = new Address(); //Address k =0x12132
Address m = k; //这里表示将k变量中保存的0x12132复制一份传给了m
尝试画这个代码的图
public class T{
A a;
public static void main(String[] args) {
D d =new D();
C c = new C();
B b= new B();
A a = new A();
T t = new T();
c.d =d;
b.c = c;
a.b =b;
t.a =a;
//编写程序代码通过t来访问d中的i
// D t.a.b.c.d = d;
System.out.println(t.a.b.c.d.i);
d.i =20;
System.out.println(t.a.b.c.d.i);
D d1 = t.a.b.c.d ;
System.out.println(d1.i);
d1.i =30;
System.out.println(d.i);
}
}
class A {
B b;
}
class B {
C c;
}
class C {
D d;
}
class D {
int i;
}