Java学习---day11_字符串及正则表达式的介绍

这篇博客主要介绍了Java中的字符串和正则表达式。字符串分为不可变字符串(String)和可变字符串(StringBuffer/StringBuilder),前者在常量池中创建,不可修改;后者在堆上开辟空间,可变。字符串的常用方法包括构造方法和非静态/静态方法。正则表达式用于字符串的匹配和校验,Pattern和Matcher类是实现正则操作的核心。在多线程环境下,推荐使用StringBuilder以保证线程安全。
摘要由CSDN通过智能技术生成

Java学习—day11_字符串及正则表达式的介绍

字符串 【会】

字符串,是由若干个字符组成的一个有序序列。用String来表示一个字符串。
字符串中的内容,用双引号括起来。在双引号中,字符的数量不限制,可以是0个,可以是1
个,也可以是多个。

String类:java将与字符串相关的功能面向对象了,形成了对应的类--字符串类.

例如大家最常见的:
String str1 = "hello world";

字符串的分类

不可变字符串:
  • 对应的类:String.
  • 特点:字符串本身不能发生改变,与指向字符串的引用无关.
  • 直接使用"",创建的是不可变字符串
可变字符串:
  • 对应的类:StringBuilder/StringBuffer.
  • 特点:字符串本身可以发生变化,与指向可变字符串的引用无关
    创建可变字符串
  • StringBuffer stringBuffer = new StringBuffer("hello world");
字符串的内存分析:

字符串, 是一个引用数据类型。 但是字符串的引用, 和之前在面向对象部分的引用有一点差
别。

差别: 类的对象, 是直接在堆上开辟的空间。 字符串, 是在 常量池 中开辟的空间。 (常量
池, 是在方法区中的一个子空间)

String str = new String("hello world");
  • String是一个Java中用来描述字符串的类, 里面是有构造方法的。
  • 通过String类提供的构造方法, 实例化的字符串对象, 在堆上开辟的空间。 在堆空间中, 有一个内部维护的属性, 指向了常量池中的某一块空间。
// 在堆上开辟了一个String对象的空间, 把这个堆上空间的地址给了str1
// 在堆空间中, 有一个内部的属性, 指向了常量池中的 "hello world"
String str1 = new String("hello world");
 
// 在堆上开辟了一个String对象的空间, 把这个堆上空间的地址给了str2
// 在堆空间中, 有一个内部的属性, 指向了常量池中的 "hello world"
String str2 = new String("hello world");
 
System.out.println(str1 == str2);       // false: 因为此时 str1和str2 里面存储的是两块堆空间的地址。
System.out.println(str1.equals(str2));     // true: 因为在String类中,已经重写过equals方法了, 重写的实现为比较实际指向的常量池中的字符串。

ps:以后尽量使用equals进行String的比较

字符串拼接的内存分析

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

    • 其实,就是直接将两个由双引号直接括起来的字符串进行拼接 。类似于 String str
      = "hello" + "world"
    • 这里,直接在常量池中进行空间操作。将常量池中拼接之后的结果, 地址给 str 进行
      赋值。
  • 使用一个字符串变量和其他的进行拼接

    String s = new String(“hello”);

    String s1 = s + “world”;

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

字符串的常用方法

字符串的构造方法
  • 字符串构造方法列举
构造方法 方法描述
String() 无参构造, 实例化一个空的字符串对象。 所谓的空字符
串,其实是 “”, 并不是null。
String(String str) 通过一个字符串, 实例化另外一个字符串。
String(char[] arr) 通过一个字符数组, 实例化一个字符串。 将字符数组中的
所有的字符拼接到一起。
String(char[] arr, int
offset, int count)
通过一个字符数组, 实例化一个字符串。 将字符数组中的
指定范围的字符拼接到一起。
String(byte[] arr) 通过一个字节数组, 实例化一个字符串。 将字节数组中的
所有的字节拼接成字符串。
String(byte[] arr, int
offset, int count)
通过一个字节数组, 实例化一个字符串。 将字节数组中的
指定范围的字节拼接成字符串。
public class StringMethod1 {
   
    public static void main(String[] args) {
   
        // 1. 无参构造, 实例化一个空的字符串对象。 所谓的空字符串,其实是 "", 并不是null。
        String s1 = new String();   // String s1 = "";
        System.out.println(s1);
 
        // 2. 通过一个字符串, 实例化另外一个字符串。
        String s2 = new String("hello");
        System.out.println(s2);
 
        char[] arr1 = {
    'h', 'e', 'l', 'l', 'o' };
        // 3. 通过一个字符数组, 实例化一个字符串。将字符数组中的所有的字符拼接到一起。
        String s3 = new String(arr1);
        System.out.println(s3);
        // 4. 通过一个字符数组, 实例化一个字符串。 将字符数组中的指定范围的字符拼接到一起。
        String s4 = new String(arr1, 2, 3);
        System.out.println(s4);
 
        byte[] arr2 = {
    97, 98, 99, 100, 101, 102, 103, 104 };
        // 5. 将一个字节数组中的每一个字节,转成对应的字符,再拼接到一起,组成一个字符串。
        String s5 = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值