String类

本文介绍了Java中String类的两种创建方式及其内存管理。String对象一旦创建,内容不可变,这是由于String类未提供修改内容的方法。通过示例解释了String引用改变时,实际上是改变了引用的指向而非原内容。

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

String类概述

字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字

符串都是String类的实例.

有两种创建形式:

  1. 第一种:String s = “abc”;

    先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找

    有没有"abc", 如果没有则在常量池中添加”abc”, s引用变量指向常量池中

    的”abc”,如果常量池中有,则直接指向改地址即可,不用重新创建.

  2. 第二种: String s = new String(“abc”);

    一概在堆中创建新对象,值存储在堆内存的对象中。

String类的特点

一旦创建,内容无法改变。
为什么呢?,其实很简单,因为String类本身没有提供,没有向外提供改变其内容的方法,所以无法改变(但是String提供了很多操作方法),所以,就算你改变了String的内容,那也是更改了对象的内存指向了,对象的栈引用指向了新的内容的堆地址。

举个例子

String str="abc";
str="abcdef";

分析一下内存过程:
可以发现,这是一个简单的常量;
首先,栈中创建一个str,然后常量池中去寻找知否有一个内容是abc,如果有直接将str指向这个内容,如果没有则在常量池创建这个内容,并将str指向这个内容。
然后,将str的内容改为了abcdef,(还是一样会去常量池去寻找有没有abcdef这样一个字符串,如果有直接使用,如果没有再进行创建),这个时候,str引用先打断指向abc,重新指向abcdef。

也就是说只是str引用的指向变了,而创建的内容并没有改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值