java 之 引用数据类型(类)

      一、字符串的创建、比较
在这里插入图片描述
      这两类创建方式是不一样的。
      String s1 = “Hello”; s1指向常量池中的Hello即直接引用,否则先在常量池中创建Hello的内存空间,再引用
      String s2 = new String(“Hello”);这时在s2的堆内存中new一个对象即一定需要分配Hello大小的内存空间
      注意, 使用第一种创建方式至多创建一个String对象,但第二种方式至少创建一个对象
      ==        //比较两个字符串的地址
     equals   //比较两个字符串的地址所指向的内容
     在此我们可以看到两个字符串的引用的地址是一定不相同的,一个在常量池中,一个在堆内存中
     在程序运行结束后,常量池中String对象的内容即Hello是没有回收的,但是使用new创建的对象(已分配内存)是需要通过虚拟机回收的。
在这里插入图片描述
     大家应该可以猜一猜,没错,它的地址和地址所指向的内容都相同即使用 == 和 equals 返回值均为true,因为str1, str2 都引用常量池的同一内容,自然str1和str2所存放的地址相同。
     二、类中的引用数据类型
     类内部:

public class Person {
	String name;
	String city;
	int age;
	String sno;
//	true or false 
	boolean gender;
	void Speak() {
//		方法体
		System.out.println(name + "'age is " + age);
	}
}

     主函数:

public class Exp5_1 {
	public static void main(String[] args) {
//		创建一个对象 p(new操作)即在创建    p 就已经动态分配内存了
		Person p = new Person();
		p.name = "ZhangSan";
		p.city = "Wuhan";
		p.age = 10;
		p.gender = true;
		p.Speak();
		
	}
}

     此时的内存分布图如何呢?
在这里插入图片描述
     大致内存分配图如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值