关于Java中的String为什么不可变
来源:互联网 发布:苹果看图软件 编辑:程序博客网 时间:2024/05/17 23:39
讨论String不可变,我们首先需要弄清楚的一点,不可变是指的什么不可变!
以我的理解,String不可变是指,当String对象创建之后,这个创建的对象就不会再发生变化
看下面这段代码:
public class String_1 {public static void main(String[] args){String a = "test123456";System.out.println("a = " + a);a.replace('test', '0');System.out.println("a = " + a);}}结果输出为:
a = test123456
a = test123456
虽然中间使用replace()方法替换a中的‘1’为‘0’,但是最终输出的结果还是没有变,这是为什么呢?看看下面这张图
字符串作为一个对象,a只是对其的一个引用,相当于一个指针指向"test123456",当使用replace()方法替换其中的'1'为'0'时,内存中又新建了一个对象,但是原来a指向的字符串的值还是没有变化,所以最终输出的值都为"test123456"。
但如果像下面这样写的话,就会有所不同:
public class String_2 {public static void main(String[] args){String a = "test123456";System.out.println("a = " + a);a = a.replace('1', '0');System.out.println("a = " + a);}}结果为:
a = test123456
a = test023456
这里最后输出a的值有了变化,用图说明如下:
这是由于 a = a.replace('1', '0');此时a已经指向了新生成的对象,而不是原先的"test123456",所以最后输出a的值会发生变化,但是原来的"test123456"还存在内存当中。
查看Stringl类的源码,你可以发现在String类内部其实使用final char[]数组来存储数据的,由于用final修饰,所以该数组不能再改变,String类具体定义可以去看看源码。
总结:
- String不可变是指最初定义时的值不会改变;
- 由于String是对象类型,我们只是去引用这个对象,如果这个引用的指向发生改变,则它引用的值也会变化
参考:http://blog.csdn.net/zhangjg_blog/article/details/18319521
0 0
- 关于Java中的String为什么不可变
- Java中的String字符串为什么不可变
- 为什么Java中的String设计成不可变的?
- 干货 | Java 中的 String 为什么是不可变的?
- 为什么Java中的String是不可变的?
- Java中的String为什么是不可变的?
- Java中的String为什么是不可变的?
- Java中的String为什么是不可变的?
- Java 中的 String 为什么是不可变的
- 为什么java中的String对象时不可变的
- Java中的String对象为什么是不可变的?
- Java 中的 String 为什么是不可变的?
- Java中的String为什么说是不可变的?
- Java 中的 String 为什么是不可变的?
- (重要)Java中的String为什么是不可变的
- Java中的String为什么是不可变的?
- 171129之Java中的String为什么是不可变的?
- Java中的String为什么是不可变的?
- iOS 获取图片某一点的颜色对象UIColor
- 利用百度地图服务发布自己制作图片的地图
- WebRTC的视频传输的大致流程
- 二叉树的下一结点
- STM32F103RE使用SPI3作为从模式
- 关于Java中的String为什么不可变
- virtualBox安装centos6增强包报错解决及配置共享文件夹
- Linux环境下写一个进度条
- 多任务系统
- vim使用
- 普通Menu案例
- 1的数目
- arm-linux-uboot-kernel-rootfs移植
- 前谷歌首席 Java 架构师谈如何设优秀的 API