详述如何创建String对象

详述如何创建String对象

在研究String是如何创建对象之前,我们先来看一下基本数据类型和引用类型是如何赋值的。
关系运算符 “==”,判断值是否相等。基本数据类型:由于变量与值同在栈中,所以比较的是值是否相等。引用数据类型:因为变量存的是对象的地址,所以比较的是地址是否相等。

public class Test {
	public static void main(String[] args) {
		int a = 12;
		int b = 12;
		System.out.println(a == b);
		Object obj1 = new Object();
		Object obj2 = new Object();
		System.out.println(obj1 == obj2);
	}
}

在这里插入图片描述
String是引用数据类型,所以String类型的变量存的是所创建对象的地址。

创建String对象

String创建对象有两种方式
1、直接赋值
语法格式如下:
在这里插入图片描述
2、构造方法实现其实例化
语法格式如下:
在这里插入图片描述
String类两种创建对象的方式的区别:
1、直接赋值,这种方式会出现常量池数据共享现象
常量池是在java用于保存在编译期已确定的,已编译的class文件中的一份数据。常量池存在于堆中。

public class StringTest {
	public static void main(String[] args) {
		String str1 = "abc";
		String str2 = "abc";
		String str3 = "def";
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
		System.out.println(str1 == str2);
	}
}

在这里插入图片描述
当执行到“String str1 = “abc”;”时,JVM在常量池开辟一个空间存放字符串“abc”,并让str1存放该对象的地址。执行“String str2 = “abc”;”时,JVM会先检查常量池中是否存在一个空间其中存放字符串“abc”,如果有,则直接让str2指向改地址,如果没有,就再开辟一个空间存放该字符串。因此变量str1和ser2存放的地址相同。执行“String str3 = “def”;”时,JVM检查发现常量池中不存在一个空间存放字符串“def”,于是便开辟一个空间存放该字符串并让str3指向该空间。
2、通过创建对象,调用构造方法赋值。

public class StringTest {
	public static void main(String[] args) {
		String str1 = new String("abc");
		String str2 = new String("abc");
		String str3 = new String("def");
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
		System.out.println(str1 == str2);
	}
}

在这里插入图片描述
执行“String str1 = new String(“abc”);”时,JVM直接在堆中创建一个对象,并让str1指向该对象,同理,执行“String str2 = new String(“abc”);”时,JVM在堆中创建一个新的对象,并让str2指向该对象.因此变量str1与变量str2存放的地址不同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值