首页 > 编程语言 >Java 基础 - 字符串类

Java 基础 - 字符串类

时间:2024-11-18 13:31:40浏览次数:1  
标签:Java String int StringBuilder 基础 value 字符串 return

字符串类

重要的字符串类有 String、StringBuilder、StringBuffer

1、String

String 是不可变类,内部是由 final 定义的字符数据构成。

private final char value[];

1.1 String 类的层次结构如下:

String 实现了比较接口,字符序列接口,序列化接口,具有以上接口的特性

1.2 重写了 Object 的 equals() 和 hash() 方法

使用字符去比较和计算哈希值

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
if (anObject instanceof String) {
    String anotherString = (String)anObject;
    int n = value.length;
    if (n == anotherString.value.length) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = 0;
        while (n-- != 0) {
            if (v1[i] != v2[i]) {
                return false;
                i++;
            }
        return true;
        }
    }
    return false;
}
    
public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

1.3 String 常量池 在 JVM 中的存储位置

在 jdk1.7 之前,字符串常量池存储于方法区中

在 jdk1.7 以及之后,字符串常量池存储于堆中,主要原因:(1)方法区空间有限,容易造成方法区内存溢出(2)放在堆中可以进行复用,节省存储空间

 

2、StringBuilder

StringBuilder 是可变类,内部使用字符数组实现 ,并且有一个 内置计数器。

StringBuilder 是线程不安全的,类实现没有使用同步机制。

使用了构建器模式,每一个修改操作都会返回自身。

使用计数器是因为,value 初始化的时候可能会适当扩展数组(+16),但是实际上内容长度没有扩大

char[] value;
int count;

// 构造函数
public StringBuilder(String str) {
    // 数组长度
    super(str.length() + 16);
    // 真正字符长度
    append(str);
}

2.1 StringBuilder 类的层次结构如下:

对于字符串的具体操作,全部由 AbstractStringBuilder 实现,StringBuilder 中只有四个构造函数

2.2 append 函数实现流程

 

3、StringBuffer

StringBuffer 是 StringBuilder 的线程安全版本,所有读写操作使用 synchronized 进行修饰,多线程环境下有且只有一个线程可以对 StringBuffer 对象进行读写

StringBuffer 的类层次结构如下:

 

标签:Java,String,int,StringBuilder,基础,value,字符串,return
From: https://www.cnblogs.com/baokang/p/18552335

相关文章

  • vue2-基础核心
    vue简介vue中文官网动态构建用户界面的渐进式JavaScript框架vue的特点:遵循MVVM模式采用组件化模式,提高代码复用率,让代码更好维护声明式编码,无需直接操作DOM,提高开发效率,编码简洁、体积小,运行效率高本身只关注UI,也可以引入其他三方库开发项目使用虚拟DOM+优秀的Diff算......
  • 关于Java中算法的基础运用与讲解
    1.冒泡排序(BubbleSort)基本思路通过重复遍历要排序的列表,一次比较两个元素,如果它们的顺序错误就交换它们。这个过程会重复进行直到没有更多的交换需要做,这意味着列表已经排序完成。详细步骤外层循环:遍历数组的每个位置i,表示已经进行了多少轮比较。内层循环:从位置0......
  • javaScript交互案例
    1、模态框(弹出框)(1)、需求:点击弹出层,会弹出模态框,并且显示灰色半透明的遮挡层点击关闭按钮,可以关闭模态框,并且同时关闭半透明遮挡层鼠标放在模态框最上面一行,可以按住鼠标拖拽模态框在页面中移动鼠标松开,可以停止拖动模态框移动思路:点击弹出层,模态框和遮挡层就会显示出来d......
  • LLM 链式架构基础:从入门到实践
    在构建复杂的LLM应用时,单一的模型调用往往无法满足业务需求。本文将详细介绍如何构建一个可靠的LLM链式架构,包括基础设计模式、提示词工程和错误处理机制。为什么需要链式架构?在开始深入技术细节之前,让我们先理解为什么需要链式架构:单一模型调用的局限性输入输出格式单......
  • Scala字符串练习题
    objectStringManipulationExamples{defmain(args:Array[String]):Unit={//问题1valfloatString="3.14"valfloatValue=floatString.toFloatvalbackToString=floatValue.toStringprintln(backToString)//问题2v......
  • 24.Python基础篇-异常处理
    1.什么是异常?异常(Exception)是程序在运行过程中出现的错误情况。Python提供了强大的异常处理机制,使得程序在遇到错误时能够继续执行或者给出适当的错误提示。避免程序因为某个错误而中断。异常处理有助于提高代码的健壮性,2.异常处理的语法:try:用于包围可能会抛出异常的代码块......
  • C++ 编程基础(8)模版 | 8.2、函数模版
    文章目录一、函数模版1、声明与定义2、模版参数3、模板的实例化3.1、隐式实例化3.2、显示实例化4、模版的特化5、注意事项6、总结前言:C++函数模板是一种强大的特性,它允许程序员编写与类型无关的代码。通过使用模板,函数或类可以处理不同的数据类型,而无需重复编写......
  • Java集合框架、集合工具类Collections、泛型 ;代码之滑动窗口总结(11.15)
    Java基础学习迭代器1、迭代器的指针一开始在集合的上方next():指针下移,下移以后返回指针指向的值2、使用迭代器遍历集合元素 //正确写法Iteratoriterator=coll.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//错误写法,......
  • 营业执照 OCR 识别 API 接口用Java如何调用
    营业执照OCR识别API是一项创新的技术应用,它充分利用了先进的光学字符识别技术,能够快速、准确地读取营业执照上的文字和数字信息。这个接口会自动识别营业执照上的关键数据,包括但不限于公司名称、注册号、法定代表人、公司类型、成立日期、注册资本、营业期限、营业范围等......
  • 「Java EE开发指南」如何使用Visual JSF编辑器设计JSP?(一)
    VisualJSFDesigner的目标是使创建JSF应用程序的特定于组件的工作更容易可视化,在本教程中,您将使用可视化设计器设计JSF登录页面,将学习如何:创建一个JSF项目创建一个新的JSF页面设计JSF页面该功能在MyEclipse中可用。MyEclipsev2024.1离线版下载MyEclipse技术交流群:74233......