认识 String 类(字符串及内存布局相关问题(1))

本文详细介绍了Java中的String类,包括创建字符串的不同方式及其内存布局,字符串的相等比较,以及字符串常量池的概念。重点讨论了直接赋值与构造方法创建字符串对象的区别,并强调了equals方法在比较字符串内容时的重要性。
摘要由CSDN通过智能技术生成

1. 创建字符串

常见的构造 String 的方式

// 方式一
String str = "Hello Bit";
// 方式二
String str2 = new String("Hello Bit");
// 方式三
char[] array = {
   'a', 'b', 'c'};
String str3 = new String(array);

在官方文档上 (https://docs.oracle.com/javase/8/doc/api/index.html) 我们可以看到 String 还支持很多其他的构造方式, 我们用到的时候去查就可以了.

注意事项:

  • “hello” 这样的字符串字面值常量, 类型也是 String.
  • String 也是引用类型. String str ="Hello";

代码内存布局如下:

回忆 "引用"

  • 引用类似于 C 语言中的指针, 只是在栈上开辟了一小块内存空间保存一个地址.但是引用和指针又不太相同, 指 针能进行各种数字运算(指针+1)之类的, 但是引用不能, 这是一种 “没那么灵活” 的指针.
  • 另外,也可以把引用想象成一个标签, “贴” 到一个对象上. 一个对象可以贴一个标签, 也可以贴多个. 如果一个对 象上面一个标签都没有,那么这个对象就会被 JVM 当做垃圾对象回收掉.
  • Java 中数组, String, 以及自定义的类都是引用类型.

由于 String 是引用类型, 因此对于以下代码

String str1 = "Hello";
String str2 = str1;

内存布局如图:
在这里插入图片描述是不是修改 str1 , str2 也会随之变化呢?

String str1 = "Hello";
String str2 = str1;
str1 = "world";
System.out.println(str2);
// 执行结果
Hello

我们发现, “修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秃头小宝儿

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

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

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

打赏作者

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

抵扣说明:

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

余额充值