Java字符串类

news2024/11/17 11:26:49
  1. string类的理解(以JDK8为例说明)
  2.  

1.1的声明

public final class String

implements java.io.Serializable, Comparable<String>, CharSequence

 

final:String是不可被继承的

Serializable:可序列化的接口。凡是实现此接口的类的对象就可以通过网络或本地流进行数据的传输。

1.2内部声明的属性

private final char value[] ;//存储字符串数据的容器

       >final : 指明此value数组一旦初始化,其地址就不可变。

 

Jdk9开始:

Private final char byte[] value;//存储字符串数据的容器

 

2.字符串常量的存储位置

字符串常量都存储在字符串常量池(StringTable)中

字符串常量池不允许存放两个相同的字符串常量。

字符串常量池,在不同的jdk版本中,

存放位置不同。jdk7之前:字符串常量池存放在方法区

jdk7及之后:字符串常量池存放在堆空间。

 

  1. String的不可变性的理解b7ec822190534ae5b9f4f95aa35bc38c.png

 

 

当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有位置置修改
* 当对现有的字符串进行拼接操作时,需要重新开辟空间保存拼接以后的字符串,不能在原有的位置修改
* 当调用字符串的repLace()替换现有的某个字符时,需要重新开辟空间保存修改以后的字符串,不能在原有的位置修改

 

 

代码:

package Test0704;



public class StringDeno{

    public void test1(){



        String s1 = "hello";  //字面量的定义方式

        String s2 = "hello";



        System.out.println(s1 == s2);

    }

    /**

     * String 的不可变性

     * 当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有位置置修改

     * 当对现有的字符串进行拼接操作时,需要重新开辟空间保存拼接以后的字符串,不能在原有的位置修改

     * 当调用字符串的repLace()替换现有的某个字符时,需要重新开辟空间保存修改以后的字符串,不能在原有的位置修改

     */



    public void test2(){

        String s1 = "hello";

        String s2 = "hello";



        s2 = "hi";

        System.out.println(s1);

    }



    public void test3(){

        String s1 = "hello";//在字符串常量池new了一个hello 地址gei了s1

        String s2 = "hello";//获取s1的地址值



        s2 += " world";

        System.out.println(s1);

        System.out.println(s2);

    }

    public void test4(){

        String s1 = "hello";

        String s2 = "hello";



        //将s2中的l转换成w

        String s3 = s2.replace("l","w");



        System.out.println(s1);

        System.out.println(s2);

        System.out.println(s3);

    }



    public static void main(String[] args) {



//        new StringDeno().test1();

//        new StringDeno().test2();

//        new StringDeno().test3();

          new StringDeno().test4();

    }





}

 

  1. String实例化的两种方式

第1种方式:String s1 ="hello";

第2种方式: String s2 = new String("hello");

 

String s2 = new String("hello");在内存中创建了几个对象? 两个

个是堆空间中new的对象。另一个是在字符串常量池中生成的字面量

 

 

String的连接操作:+

情况1:常量+常量:结果仍然存储在字符串常量池中。注:此时的常量可能是字面量,也可能是final修饰的常量

情况2:常量+变量 或 变量+变量:都会通过new的方式创建一个新的字符串,返回堆空间中此字符串对象的地址

情况3:调用字符串的intern():返回的是字符串常量池中字面量的地址

 

string的构造器和常用方法

6.1 构造器

public string():初始化新创建的 string对象,以使其表示空字符序列。

String(String original): 初始化一个新创建的Strng对象,使其表示一个与参数相同的字符序列,

public string(char[] value) :通过当前参数中的字符数组来构造新的String。

public String(char[] value,int offset,int count):通过字符数组的一部分来构造新的String,

public String(byte[] bytes) :通过使用平台的**默认字符集**解码当前参数中的字节数组来构造新的String。

public String(byte[] bres,String charsetName)·:通过使用指定的字符集解码当前参数中的字节数组来构造新的String对象

 

基本数据类型---》转换成String

Int a = 3;

//方式1

String s1 = a +””;

//方式2

String s2 = String.valueof(num);



String与char相互转换

String str = “hello”



//String àchar []:调用String的toCharArray()

Char[] arr = str.toChatArray();

For (int I = 0;i < arr.length ; i++){

    System.out.println(arr[i]);



//char[] àString:调用String的构造器

String str1 = new String(arr);

System.out.println(str1);//hello

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

建筑施工脚手架安全技术统一标准

为统一建筑施工脚手架设计、施工、使用及管理&#xff0c;做到技术先进、安全适用、经济合理&#xff0c;制定本标准。 本标准适用于房屋建筑工程和市政工程施工用脚手架的设计、施工、使用及管理。 建筑施工脚手架的设计、施工、使用及管理&#xff0c;除应符合本标准外&…

第一百零二天学习记录:数据结构与算法基础:初识数据结构与算法

管理系统模型&#xff08;仓库管理系统&#xff09;—顺序表 操作对象之间的关系&#xff1a;线性关系 数据结构&#xff1a;线性数据结构、线性表 &#xff08;例如&#xff1a;学生成绩管理系统、人事管理系统、仓库管理系统、通讯录等。&#xff09; 操作对象&#xff1a;若…

OWASP 定义的大模型应用最常见的10个关键安全问题

7月15日之前入驻华为云&#xff0c;可参与Check抽奖活动&#xff0c;抽奖活动在文末 1. 《OWASP 大模型应用最常见的10个关键安全问题》项目简介&#xff08;OWASP TOP10 LLMs Project&#xff09; *OWASP Top 10 for Large Language Model Applications OWASP 大模型应用程序…

vue3使用腾讯地图(‘关键词搜索、逆地址解析‘)

1.登录腾讯地图位置服务进入控制台 申请腾讯地图开发者进入控制台申请自己的key 腾讯位置服务 - 立足生态&#xff0c;连接未来 2.进入vue项目的public文件下的index.html 引入腾讯资源包&#xff0c;并把申请的key填入 <script src"https://map.qq.com/api/js?v2…

文心一言 VS 讯飞星火 VS chatgpt (57)-- 算法导论6.4 1题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;57&#xff09;-- 算法导论6.4 1题 一、参照图 6-4 的方法&#xff0c;说明 HEAPSORT 在数组 A(5&#xff0c;13&#xff0c;2&#xff0c;25&#xff0c;7&#xff0c;17&#xff0c;20&#xff0c;8&#xff0c;4)上的操作过程…

怎么修复损坏的视频文件?视频文件修复办法分享!

随着科技的不断发展&#xff0c;我们的生活中已经离不开各种类型的视频文件。因为各式各样的原因&#xff0c;有时候我们的视频文件可能会损坏。 而损坏的视频文件通常是无法正常播放&#xff0c;这无疑会给我们的生活和工作造成极大的困扰。那么&#xff0c;怎么修复损坏的视…

【Linux学习】记录下Linux的常用基本指令~

1、Linux是一个操作系统&#xff0c;和windows是“并列”关系。Linux已经成为"世界第一大操作系统"。 2、Linux这种使用命令的方式比图形化界面的好处&#xff1f; &#xff08;1&#xff09;节省系统资源&#xff1a;运行图形化界面需要让系统付出一些额外开销&am…

stm32(时钟和中断事件知识点)

一、复位和时钟控制&#xff08;RCC&#xff09; 复位 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWDG复位) 3. 独立看门狗计数终止(IWDG复位) 4. 软件复位(SW复位) 5. 低功耗管…

软件为什么需要进行应急演练脚本?

软件为什么需要进行应急演练脚本&#xff1f;在当今互联网时代&#xff0c;安全问题愈加突出&#xff0c;不断有新的网络攻击方式不断涌现。针对软件系统的安全漏洞和攻击活动不断增加&#xff0c;软件应急演练变得尤为重要。 首先&#xff0c;应急演练可以帮助软件团队建立应急…

C++11可变参数模板,lambda表达式,包装器

目录 可变参数模板 lambda表达式 问题的引入 lambda表达式语法 捕捉列表的使用 函数对象和lambda表达式 function包装器 可变参数模板 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板&#xff0c;相比C98/&#xff0c;类模版和函数模版中只能…

基于redis实现延时队列(一)

背景 最近项目中需要对一条数据&#xff0c;在半小时候更改其状态&#xff0c;类似于提交商城订单半小时后未支付的订单需要更改为超时状态&#xff0c;当然这个解决方案有很多&#xff0c;最好的解决方案是用MQ的死信队列&#xff1b;但由于项目中没有引入MQ&#xff0c;故本…

PMP-质量管理的重要性

本篇文章主要是方便从事于项目管理的“初学者”们了解质量管理的重要性&#xff01;&#xff01;&#xff01; 一、什么是质量管理 项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求&#xff0c;以满足相关方目标的各个过程。此外&#xff0c;项目质…

Latex公式炫酷技巧

最近看到一个炫酷的latex公式用法&#xff0c;特意在此记录一下 效果如下 latex代码如下 \begin{equation}\mathcal{L}_{mot}^{\textcolor{magenta}{\bullet}} \frac{1}{\sum_{i1}^{N}{s_i^l}}\sum_{i1}^{N}\Big\Vert{s}^{l}_i(\mathbf{\hat{f}}_i-\mathbf{f}^{fg}_i)\Big…

网络安全系统教程+学习路线

一、什么是网络安全 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域&#xff0c;都有攻与防两面…

【MySQL系列】表的学习及基本操作

「前言」文章内容大致是数据库表的基本操作 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 人生当苦无妨&#xff0c;良人当归即好。 ——烽火戏诸侯《雪中悍刀行》 目录 一、创建表二、修改表三、 删除表 一、创建表 创建…

组合模式的例子

// 组合模式的接口 public interface AccessDecisionVoter {// 投票结果的常量int ACCESS_GRANTED 1;int ACCESS_ABSTAIN 0;int ACCESS_DENIED -1;// 投票方法&#xff0c;根据用户和请求判断是否授权int vote(User user, Request request); }// 组合模式的叶子节点&#xf…

Android中system/bin/Input命令 -- Android12

IMS:Android中Input命令--Android12 1、Android12 Input命令更新1.1 shell脚本1.2 InputShellCommand#onCommand 命令解析 2、Input相关命令参数2.1 text2.2 keyevent2.3 tap2.4 swipe2.5 draganddrop2.6 press2.7 roll2.8 motionevent2.9 keycombination2.10 默认handleDefaul…

2023 WAIC图技术激活数据要素论坛圆满召开!

7月6日&#xff0c;以“智联世界 生成未来”为主题的2023世界人工智能大会&#xff08;WAIC 2023&#xff09;在上海隆重开幕。作为大会唯一的图技术论坛&#xff0c;“图技术激活数据要素论坛”也如期举行。 论坛现场&#xff0c;学术界专家学者、头部银行代表、产业界大咖齐聚…

二分图博弈(知识总结+例题)

思路来源 gzchenben的ppt 算法学习笔记(74): 二分图博弈 - 知乎 https://www.cnblogs.com/Zeardoe/p/16534557.html 知识点总结 以下部分摘自知乎&#xff1a;算法学习笔记(74): 二分图博弈 - 知乎 二分图博弈模型 给出一张二分图和起始点 H &#xff0c; A和B轮流操作…

Endnotes引用

准备不用zetro了&#xff0c;主要学校endnotes免费 该说不说&#xff0c;zetro拖入pdf直接识别并导入的功能是真的好用&#xff0c;添加备注也方便 可惜文献太多放不下了&#xff0c;扩容要加钱。 啧。算了算了。 这里主要介绍Endnotes中的文献怎么在word内引用&#xff0c…