java中的可变字符串和不可变字符串

本文涉及到的类:String、StringBuffer、StringBulider

一、不可变字符串:String

为什么说String是不可变的字符串?

有两方面来保证它的不可变性:

        一是将字符数组用final关键字修饰,被final修饰的引用数据类型值是不可变的,但这只能限制符号引用的值不可变,即指向的内存空间不可变;

        二是String作为封装类没有对外提供修改字符数组中的值的方法,以此来限制它指向的内存空间中的值也不可改变;

        不同于一中是使用语法规则达到不可变性,二中通过代码实现来达到不可变性,可以被反射破坏

1.1 引用数据类型String

String类是日常开发中最常用的基本数据类型,它作为一个引用数据类型的类却经常被误认为是基本数据类型,我认为给大家带来误解的地方恰恰就是java虚拟机做的好的地方

char ch = 'a';
boolean b = false;
byte t = 1;
short sh = 1;
int n = 2;
float f = 3.0;
long l = 4;
double d = 5.0;

String str1 = "今天又学习了";
HashMap map = new HashMap();

在变量的声明与初始化上,String成功的伪装成了“基本数据类型”。

作为一个引用数据类型,下面的代码应该更能让大家正确认识它

String str2 = new String("今天有学习吗?");

String str3 = new String("今天又学习了");

虽然new String的写法更符合引用数据类型的特征,但是我们平时却不这么写,而且也不推荐这样去写。那这样写的问题是什么呢?或者说是什么原因导致了String类与一般引用数据类型的差异呢?了解了原因,再来看问题吧。

1.2 java虚拟机对字符串的优化

1、字符串的常见相信不用过分证明了,它可以是声明为String类型的字符串变量(或者可称为常量,因为String是不可变的),也可以是你代码中的一个类名、变量名、方法名等任何可自定义的名称。

2、String作为一个引用类型,它核心的属性只有一个,而且不可变

private final char value[];
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值