java字符串和正则表达式

字符串和正则表达式

字符串

字符串的分类

不可变字符串:
对应的类:String.
特点:字符串本身不能发生改变,与指向字符串的引用无关.
直接使用"",创建的是不可变字符串
可变字符串:

对应的类:StringBuilder/StringBuffer.
特点:字符串本身可以发生变化,与指向可变字符串的引用无关
创建可变字符串
StringBuffer stringBuffer = new StringBuffer(“hello world”);

图示

在这里插入图片描述

字符串的内存分析

字符串, 是一个引用数据类型。 但是字符串的引用, 和之前在面向对象部分的引用有一点差
别。
差别: 类的对象, 是直接在堆上开辟的空间。 字符串, 是在 常量池 中开辟的空间。 (常量池, 是在方法区中的一个子空间)

字符串类型, 之所以选择在常量池中进行空间的开辟, 而不是在堆上。 原因是需要使用 享元原则

String str = new String(“hello world”);

String是一个Java中用来描述字符串的类, 里面是有构造方法的。

通过String类提供的构造方法, 实例化的字符串对象, 在堆上开辟的空间。 在堆空间中, 有一个内部维护的属性,指向了常量池中的某一块空间。

尽量使用equals进行String的比较

字符串拼接的内存地址分析

直接使用两个字符串字面量进行拼接

​ 其实,就是直接将两个由双引号直接括起来的字符串进行拼接 。类似于 String str= “hello” + “world”; 。

​ 这里,直接在常量池中进行空间操作。将常量池中拼接之后的结果, 地址给 str 进行赋值。

使用一个字符串变量和其他的进行拼接

String s = new String(“hello”);

String s1 = s + “world”;

这里的拼接,不是在常量池中直接完成的。

在这个拼接的过程中, 隐式的实例化了一个String类的对象, 在堆上开辟了空间。堆上空间内部维护了一个指向了常量池中拼接结果的一个属性。 这个堆上的空间地址给左侧的引用进行了赋值。

字符串的常用方法

字符串的构造方法(列举)

在这里插入图片描述

字符串的非静态方法

因为字符串, 是常量。 任何的修改字符串的操作, 都不会对所修改的字符串造成任何的影响。 所有的对字符串的修改操作, 其实都是实例化了新的字符串对象。 在这个新的字符串中, 存储了修改之后的结果。 并将这个新的字符串以返回值的形式返回。 所以, 如果需要得到对一个字符串修改之后的结果, 需要接收方法的返回值。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

字符串的静态方法

在这里插入图片描述

StringBuffer和StringBuilder类

概念

都是用来操作字符串的类,我们成为可变字符串

字符串都是常量, 所有的操作字符串的方法, 都不能直接修改字符串本身。 如果我们需要得到修改之后的结果, 需要接收返回值。

StringBuffer和StringBuilder不是字符串类, 是用来操作字符串的类。 在类中维护了一个字符串的属性࿰

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值