黑马程序员—Java中的字符串浅析

本文详细探讨了Java中String类的常量性质、存储位置及equals方法与==的区别,通过实例展示了String对象的创建方式及其背后的内存管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- android培训java培训、期待与您交流! ---------------------


Java中的String类,即字符串类,它的对象往往与其他对象有很多不同的地方,让人琢磨不透。经过几天的学习,我想总结一下String类的一些特点。


1. 相当于常量:

String字符串是常量,建好之后不可以修改(想要随时修改可以使用StringBuffer类)。


2. 存储位置:

通常定义一个对象是以这样的方式 

String str = new String("test"); 

但是String类还可以直接赋值 

String str = “test”; 

这两种方式到底有什么区别呢?这就需要弄清楚Java中的字符串是怎么存储的。这个问题要涉及到Java中两个重要的存储区——堆(Heep)和字符串池(String Pool)。堆是用来存储对象的,包括该对象的特有属性(即非静态属性,方法存放在方法区,这里暂时不讨论)。字符串池用来存放当前用到的不重复的字符串,方便使用,以免重复定义相同字符串。

语句String str = new String("test");的过程是这样的,首先看字符串池中有没有“test”字符串,如果没有就在池中加入“test”字符串,之后在堆中建立一个对象(也有一份“test”字符串信息),将对象的地址返回给str变量。

语句String str = “test”;的执行过程是这样的,首先查看字符串池中有没有‘“test”字符串,如果没有就在池中加入“test”字符串,之后将池中“test”字符串的地址返回给str变量。可以看到,这里并没有创建对象。

这样一来,就会有一些重要的特性产生

(1)String str1 = “test”; 

  String str2 = “test”;

str1与str2的值相等。因为他们的值都是池中“test”的地址(每个字符串在池中只有一份)

(2)String str1 = new String(“test”);

           String str2 = new String("test");

  str1与str2的值不相等。因为他们的值是两个独立的对象的地址,只不过对象里面保存的字符串相同而已(第一句话执行后,pool中有“test”字符串)。


3. equals方法与“==”

判断两个对象(a和b)是否是同一个对象,可以有两种方法供选择

(1)System.out.println(a.equals(b));

(2) System.out.println(a==b);

equals和“==”又有什么区别呢?

“==”是直接比较两个变量的值(对象的地址)是否相同,如果相同就是同一个对象,返回true,否则返回false。

  equals是一个判断对象是否相同的方法,Object类中定义它与“==”的功能一样,地址一致则返回true,否则返回false。但是String类复写(Overide)了这个方法,功能变为,如果两个String对象指定的字符串相同则返回true,不同则返回false,也就是说,他比较的是对应字符串的值是否相同。

故:

String a = new String("abc");

String b = new String("abc");

String c = "abc";

String d = "abc";

a.equals(b)的结果是true

a==b的结果是false

c.equals(d)的结果的true

c==d的结果是true

a.equals(c) 的结果是true

以上三点是我的一点小总结,有不妥的地方欢迎指正,谢谢大家。


----------------------- android培训java培训、期待与您交流! ----------------------

详细请查看: http://edu.youkuaiyun.com/heima
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值