聊聊java中的那些事(一)String在java中的地位

本文深入探讨了Java中String类型的特性,解释了为何String既非基本类型,却能保持不可变性。通过代码示例说明了尽管尝试修改String对象,其原始值保持不变的原因。

我们都知道java中的基本类型包括,整型/浮点型/布尔型/字节型,但是我们经常使用的String类型是属于一个类类型呢,还是属于一个基本类型呢?接下来我们就来聊聊java中的String类型

1/Java的String类型在Java的定义中,本身没有被划分为基本类型,所以从这点上来讲,String不属于Java的基本类型。但是,一般来讲,如果String不属于基本类型,那么为什么在被当作一个对象使用的时候,改变这个对象的值,这个对象本身的值却没有发生变化呢?
例如:
public class Test{
public static void main (String args[]){
String str = “hello java !”;
System.out.println(str);
changeStr(str);
System.out.println(str);
}
public static void changeStr(String str){
str = str +" ,I’m changed !";
}
}

大家先猜一下这两次输出的str值一样吗?
在这里插入图片描述
答案是:一样!,是不是有点吃惊?刚开始我也一样,不敢相信,接下来咱们一起来分析下为什么一样!

首先,Java中定义的String类型,虽然是个类类型,但是它的值是不可变的,为什么不可改变呢,这涉及到String内部的存储机制,String 内部用来存值的对象是一个final 类型的char ,这个是不可改变的,即值一旦确定,皆不能再对其进行更改,所以说它是不能被改变的。
但是,可能又会有人问,既然是不可改变的,那么为什么可以被重新赋值,然后还可以调用一些字符串操作的方法来改变字符串,这不就和字符串对象不能被改变就自相矛盾了吗?
先不要着急,且听我给你慢慢道来。字符串对象确实可以被重新赋值,并且也可以调用字符串的操作方法改变它,但是我们改变的不是这个字符串对象本身,而是改变了一个对象的引用,为什么说是一个对象的引用,这是因为在执行那些改变字符串操作的时候,Java其实是在用这个对象的引用来执行操作,并没有改变对象的本身。这个引用会在修改的过程中指向一个新的内存空间,这时候改变的其实是这个新的内存,如果没有及时的将这块空间保存下来,那么当执行完后,这块空间就会被回收,这时候执行的改变就不存在了。所以,不管怎们操作,对象的本身是没有被改变的。
接下来,大家可以执行这样的一个案例来测试一下:
String str2 = “hello world ! how great you are !”
str2.replace(“h”,“k”);
System.out.println("str2 = "+str2);

输出的结果是: str2= “hello world ! how great you are !”
大家验证便知,好的本期就讲到这里,下期再见!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值