【学习源码】String类

本地如何安装midscene.js运行环境 手把手教你本地安装midscene.js运行环境 阅读详情

1. 学习 jdk 的 String 类。

-----------------------------------------------------------------

concat(String str) :   拼接 String。

public String concat(String str) {
        int otherLen = str.length();
        if (otherLen == 0) {
            return this;
        }
        int len = value.length;
        char buf[] = Arrays.copyOf(value, len + otherLen);
        str.getChars(buf, len);
        return new String(buf, true);
 }

   char buf [] = Arrays.copyOf(value, len+ otherLen);   将 value 转换为一个 长度合适的字符数组。  

public static char[] copyOf(char[] original, int newLength) {
        char[] copy = new char[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
}

     str.getChars(buf, len) : 将 str 的value 复制到 buf 上,从 index = len 开始赋值。

void getChars(char dst[], int dstBegin) {
        System.arraycopy(value, 0, dst, dstBegin, value.length);
}

-------------------------------------------------------------

replace(char oldChar, char newChar) :   替换 String 中的某个字符

public String replace(char oldChar, char newChar) {
        if (oldChar != newChar) {
            int len = value.length;
            int i = -1;
            char[] val = value; /* avoid getfield opcode */

            while (++i < len) {
                if (val[i] == oldChar) {
                    break;
                }
            }
            if (i < len) {
                char buf[] = new char[len];
                for (int j = 0; j < i; j++) {
                    buf[j] = val[j];
                }
                while (i < len) {
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(buf, true);
            }
        }
        return this;
    }

1. 判断 是否 没有符合条件的 字符。没有的话,就直接结束了。

2. 如果需要替换,先将 前面不用替换的字符存储起来。

3. 从开始替换的位置,循环判断。

 

equals() : 

                比较 两个 String 是否相等。为什么重写,因为 Object 只能比较 是同一个,而 new String() 会创建一个新的对象

                所以,涉及到对象的比较或者 map 的key值的类,都需要重写。

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;
 }

 1. 先判断 是否是同一个对象、

    2. 判断是否属于 String 类型,

      3. 获取长度,循环 比较 每个字符。

equalsIgnoreCase():

public boolean equalsIgnoreCase(String anotherString) {
        return (this == anotherString) ? true
                : (anotherString != null)
                && (anotherString.value.length == value.length)
                && regionMatches(true, 0, anotherString, 0, value.length);
}

regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) : 

public boolean regionMatches(boolean ignoreCase, int toffset,
            String other, int ooffset, int len) {
        char ta[] = value;
        int to = toffset;
        char pa[] = other.value;
        int po = ooffset;
        // Note: toffset, ooffset, or len might be near -1>>>1.
        if ((ooffset < 0) || (toffset < 0)
                || (toffset > (long)value.length - len)
                || (ooffset > (long)other.value.length - len)) {
            return false;
        }
        while (len-- > 0) {
            char c1 = ta[to++];
            char c2 = pa[po++];
            if (c1 == c2) {
                continue;
            }
            if (ignoreCase) {
                // If characters don't match but case may be ignored,
                // try converting both characters to uppercase.
                // If the results match, then the comparison scan should
                // continue.
                char u1 = Character.toUpperCase(c1);
                char u2 = Character.toUpperCase(c2);
                if (u1 == u2) {
                    continue;
                }
                // Unfortunately, conversion to uppercase does not work properly
                // for the Georgian alphabet, which has strange rules about case
                // conversion.  So we need to make one last check before
                // exiting.
                if (Character.toLowerCase(u1) == Character.toLowerCase(u2)) {
                    continue;
                }
            }
            return false;
        }
        return true;
    }

hashcode() : 

 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;
}

 

 

 

PADS VX 蛇形走线的设置方法与绕制 在PCB设计过程中,在等长的设置中是必须用到蛇形走线的,并且DDR模块也会经常使用到。因此掌握蛇形走线的设置方法对我们PCB高速板设计中有很大的帮助。下面介绍蛇形走线的设置方法与绕制。1.单根网络线的蛇形走线的设置:打开PADS router界面,点击“工具”→“选项”(快捷方式“Ctrl+Enter”),弹出“选项”窗口,选择“布线”界面下的“调整”,在“调整”界面,设置蛇形走线,倒角比例可以灵活设置。操作如下图所示:完成蛇形走线的配置后,快捷方式“F3”进行交互式布线时,单击右键选择“添加蛇形走线”,便 阅读详情

相关推荐

NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()

Please use torch.nn.Module.to_empty() instead of torch.nn.Module.to()输出(llama) (base) [root@localhost home]# nvidia-smi Unable to determine the device handle for GPU0000:09:00.0: Unknown Error。这是典型的“孤儿进程”,但它还是。(僵尸进程),占用 GPU 资源。如果进程仍然不消失,并且。,这意味着它的父进程是。

m0_61636632的博客 2096

String类源码学习

String类源码学习

baidu_35160588的博客 228

告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)

本文介绍如何使用KRobot图形化编程工具快速搭建Arduino巡线小车,无需编写代码。从硬件准备到逻辑构建,详细讲解传感器数据处理、电机控制优化及高级功能扩展,帮助教育工作者和创客爱好者10分钟内完成项目。

weixin_30632089的博客 394

JDK源码学习笔记——String类

JDK源码学习笔记——String类 JDK版本为1.8.0_172 String类的源码解读 修饰符: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { String类是final修饰符修饰的,不可以被继承,是最终类。 实现的接口: Serializable接口:Serializable接口是一个标记接口,用于实现序列化操作,如RMI的远程调用

weixin_41440851的博客 289

Matlab激活失败?手把手教你解决License checkout failed问题(附详细截图)

本文针对Matlab激活后出现“License checkout failed”错误的常见问题,提供了详细的解决方案。核心在于精准定位并正确填写Windows系统用户名,而非计算机名或账户全名。文章通过分步截图和命令指引,手把手教你使用`whoami`命令获取正确信息,并重新运行激活程序,从根本上解决因用户名填写错误导致的许可检查失败问题。

weixin_29062823的博客 572

避开这些坑!晶圆封装中Wire Bonding(引线键合)的5种常见不良与实战调试心得

本文深入探讨晶圆封装中Wire Bonding(引线键合)的5种常见不良现象,包括Wire Offset、BSOB不良、球径/球厚异常、弧度不良和IMC问题。通过实际案例和参数优化方案,帮助工程师提升封装质量和可靠性,特别适用于半导体封装领域的专业人士。

weixin_33672109的博客 524

jdk源码学习分析(一):java.lang.string类

  之前只有用到的时候才会去看一下某个类的源码。最近比较闲,觉得有必要系统学习一下jdk的源码。进行一个系统的学习。通过博客,也相当于一个做笔记的过程,加深印象。打开之后才发现对于对于英语渣真的是一万点伤害,注释全都是英文,基本上每一句都是能看懂一半意思,懵逼脸。网上搜了一下有中文的jdk,但是也是别人整合好的,什么方法方法介绍什么的,相当于一个百科书,但是没有我想要的实现方法的源码,没办法,这个...

weixin_30748995的博客 89

保姆级教程:在DolphinScheduler 3.x中配置Apache SeaTunnel任务(Flink/Spark双引擎)

本文提供了一份详细的教程,指导如何在DolphinScheduler 3.x中配置Apache SeaTunnel任务,支持Flink和Spark双引擎。从环境准备、脚本选择到配置文件编写和任务调度优化,涵盖了所有关键步骤和常见问题解决方案,帮助用户高效集成SeaTunnel到海豚调度系统中。

weixin_42524945的博客 194

学习String类源码的感悟

String类方法

zzh_1016的博客 205

新手必看:如何用PhaGCN2和vConTACT2搞定宏病毒组注释(附避坑指南)

本文为宏病毒组研究新手提供了使用PhaGCN2和vConTACT2进行病毒注释的完整实战指南。内容涵盖从Conda环境配置、软件安装、参数解析到结果解读的全流程,并重点分享了整合双工具进行交叉验证的策略与常见报错解决方案,旨在帮助研究者高效、准确地完成病毒分类注释工作。

j2k3l4的博客 797

YOLO与ORB-SLAM3的结合:实现动态环境下的目标检测与视觉SLAM

摘要: 本文介绍如何将YOLOv5目标检测与ORB-SLAM3视觉SLAM系统结合,实现动态环境下的机器人感知与定位。内容包括:源码下载(集成项目YOLO_ORB_SLAM3)、libtorch安装(PyTorch C++支持)、编译配置(解决路径依赖问题)、ROS环境下的部署(Noetic适配),以及使用TUM数据集的测试流程(RGB-D数据关联与运行)。重点解决编译时Torch路径错误、ROS与Anaconda冲突等问题,并展示系统运行效果。该整合方案为动态场景SLAM提供目标检测能力,未来可优化检测模

FJN110的博客 960

jdk源码学习——String类

String类String类String类属性String类构造函数String类的常用方法equalscompareTohashCodeconcatreplacetrimintern其他常用的简单方法总结 String类 String类被final所修饰,也就是说String对象是不可变量。String类实现了Serializable, Comparable, CharSequence接口。 Comparable接口有compareTo(String s)方法,CharSequence接口有length

zty 557

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导

在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。版本如何关闭模块复用后铜皮自动从动态变成静态操作指导。如何关闭这个功能,具体操作如下。

weixin_54787054的博客 1259

JAVA源码学习(一)——String类

一、String类的不可变性源码:public final class String//final修饰类,不可继承private final char value[];//String类实际返回值为final修饰的char数组,其对象内容     1、测试数组char数组能否代替字符串 public static void main(String[] args) { String ...

不忘初心的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JDK1.8 String类源码学习

本文深入解析了String类的核心实现原理。首先介绍了String类的定义,指出其基于final修饰的char数组存储,实现了Serializable、Comparable等接口。然后重点分析了构造方法,包括参数为String、char[]、StringBuffer/StringBuilder等不同场景的实现。接着详细解读了常用方法源码:length()/isEmpty()直接访问数组长度;equals()通过逐字符比较实现值相等判断;compareTo()基于ASCII码进行字典序比较;replace()

热爱技术、喜欢学习、乐于分享 823

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

String类源码 学习与分析

掌握与分析String类中常见的方法(openjdk-1.8): length、charAt、compareTo、compareToIgnoreCase、concat、contains startsWith、equals、indexOf、split tocharArray、toLowerCase、trim、valueOf String底层:jdk1.8及以前使用是char[ ],1.9开始使用byte[ ]; ps:Java 9引入了Compact Strings来取代Java 6的Compressed

竹蜻蜓飞行的博客 378

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JDK源码学习--String类

String类 String对象不可变,所以可以共享,当对象创建完之后,该对象的内容(字符序列)是不允许改变的,细看源码发现内容改变则会new一个新的String对象,返回到原地址中。String类维护的char数组被final所修饰,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,而原来的字符串还是存在的,并且产生垃圾 实现接口 public...

三道杠 433

深入学习java源码——String类

String类作为java语言中常用的重要的类之一,源代码看起来也比较多,不过花点时间总还是会有收获的。 package java.lang; import java.io.ObjectStreamField; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.uti...

那夜那风的博客 417

java-String类源码学习

以主流的 JDK 版本 1.8 来说,String 内部实际存储结构为 char 数组,源码如下: public final class String implements java.io.Serializable, Comparable<String>, CharSequence { // 用于存储字符串的值 private final char value[...

qq_42278461的博客 152

java基础之String类源码学习

一、定义 public final class String implements java.io.Serializable, Comparable<String>, CharSequence{} 从该类的声明中我们可以看出String是final类型的,表示该类不能被继承,同时该类实现了三个接口:java.io.Serializable、Comparable<Strin...

cf_083333的博客 331

Java学习之String类源码分析

Java学习之String类源码分析 1、String类构造方法源码分析(从JDK1.0版本开始) String是一个不可变对象,因为它是一个不可变的字符数组 //字符串是常量,它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。 String s="abc";//因为在实际开发中,大部分时间,开发人员都是和字符串打交道,所以默认给出一种简单的创建方法 //String s="abc" 等效于: char[] charArray = {'a','b',

Java学习 531

源码学习-String类

最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码。 1.类定义 String 被final修饰,是叶子类,不能不继承。实现了Serializable,Comparable,CharSequence 接口 public final class String implemen...

weixin_30736301的博客 115

JDK源码学习之String类

public final class String implements java.io.Serializable,ComparableString>,CharSequence{ } String 类不属于基本数据类型,由于是final类型,所以不能被继承,但是可以序列化 /** The value is used for character storage. */ private fin

u011768697的博客 301

java基础学习总结——String类源码解析

一、String类想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码:public final class String implements java.io.Serializable, Comparable&lt;String&gt;, CharSequence { /** The value is used for character storag...

changhenshui1990的博客 881

Java源码学习-String类源码的常用api阅读

String类源码阅读String构造器init和cinitgetChars && getBytesequalscompareTohashCodeindexOfsubString String 初学java的时候被问最多的一个问题就是String在java里是对象还是基本类型, 现在很明显, 这是个类, String其实也就是个字符数组 private final char val...

Cia_zibo的博客 364

JDK源码==》String类学习

文章目录1、String类学习2、常用方法 1、String类学习 public final class String implements java.io.Serializable, Comparable<String>,CharSequence { // 该数组用于存放字符数据,不可变 private final char value[]; // 缓冲hash码值,默认是0 private int hash; private sta

weixin_42250577的博客 238
上一篇: Weblogic
下一篇: 【Spring】几个注解的理解
jy0921_
博客等级 码龄11年 329粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值