Java字符串类

  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了s1String s2 = "hello";//获取s1的地址值s2 += " world";System.out.println(s1);System.out.println(s2);}public void test4(){String s1 = "hello";String s2 = "hello";//将s2中的l转换成wString 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;//方式1String s1 = a +””;//方式2String 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.hqwc.cn/news/15314.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

今日分享:Midjourney巧妙地用参考图/垫图来绘画图

大家都知道AI绘画工具每次生成的效果都是随机的&#xff0c;但是现在很多AI绘图工具都提供了利用参考图/垫图的方式出图&#xff0c;这样就可以让让AI画作生成自己想要的布局、场景、色彩等等。 国内的AI绘图工具一般都好操作&#xff0c;国外主流的Midjourney也可以添加参考图…

华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(二)

系列文章目录 个人简介&#xff1a;机电专业在读研究生&#xff0c;CSDN内容合伙人&#xff0c;博主个人首页 Python面试专栏&#xff1a;《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读&#xff0c;一起进步&#xff01;&#x1f31f;&#x1f31f;&#x1f31f; …

ESP32(MicroPython) TFT LCD多功能显示(RTC+DHT22)

本程序内容与之前的类似&#xff0c;传感器换成DHT22&#xff0c;测量温湿度更符合日常使用的需要。逻辑上的一项改动是测量的温度和湿度值统一保留一位小数。 代码如下 from ili934xnew import ILI9341, color565 from machine import Pin, SPI import m5stack import tt14 …

计算机与网络发展的7个阶段【图解TCP/IP(笔记一)】

文章目录 计算机与网络发展的7个阶段批处理分时系统计算机之间的通信计算机网络的产生互联网的普及以互联网技术为中心的时代从“单纯建立连接”到“安全建立连接” 计算机与网络发展的7个阶段 批处理 所谓批处理&#xff0c;是指事先将用户程序和数据装入卡带或磁带&#xf…

需求分析的概念和原则

概念和原则 需求分析是指在软件开发和项目管理中&#xff0c;通过收集、理解、分析和记录用户和系统对系统或产品的需求&#xff0c;以确定其详细的特征和功能。它是一个关键的过程&#xff0c;旨在确保项目成功地满足用户的需求和期望。 在进行需求分析时&#xff0c;有一些…

【网络系统集成】网络认证实验

1.实验名称 网络认证实验 2.实验目的 学习网络认证配置 3.实验内容 3.1拓扑结构图 3.2地址分配 <

DynaSLAM代码详解(1) — RGBD模式DynaSLAM运行流程

目录 1.1 DynaSLAM和ORB-SLAM2文件对比 1.2 RGBD模式运行流程 论文翻译地址&#xff1a;动态SLAM论文(2) — DynaSLAM: Tracking, Mapping and Inpainting in Dynamic Scenes_几度春风里的博客-CSDN博客 1.1 DynaSLAM和ORB-SLAM2文件对比 DynaSLAM是一个建立在ORB-SLAM2基础上…

【数据分析 - 基础入门之NumPy⑥】- NumPy案例巩固强化

文章目录 前言一、NumPy基础训练1.1 创建一个长度为10的一维全为0的ndarray对象&#xff0c;并让第5个元素为11.2 创建一个元素为从10到49的ndarray对象1.3 将第2题的所有元素位置反转1.4 创建一个10*10的ndarray对象并打印最大最小元素1.5 创建一个10*10的ndarray对象&#xf…

Java web开发--springboot

Java web开发--springboot Java有很多web框架 但是有的框架不是很好用:比如Java Servlets(个人感觉)不好调试,WEB-INF文件关联来关联去很烦躁,启动后 crtlc还关闭不了(我一般习惯用ctrlc命令来关闭服务).导致后面我调试springboot时一直报错,原来是Java Servlets的服务没关(我习…

CUDA+CUDNN+torch+torchvision安装

弄了好久&#xff0c;终于弄好了&#xff01;&#xff01;&#xff01; 原因&#xff1a;其实之前我是已经配置好pytorch的相关环境的了。但是这段时间&#xff0c;在跑GNN相关论文中的代码时&#xff0c;发现代码中的某个函数要求torch必须得是1.8 而我之前安装的是torch1.1…

SQl排序与分页

1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date FROM employees ORDER…

IDEA使用教程

1. 查看代码历史版本 若要查看特定 Java 类的代码历史版本&#xff0c;请执行以下操作&#xff1a; 鼠标右键点击所需查看的 Java 类。 在弹出菜单中选择 "Local History"&#xff08;本地历史&#xff09; >> "Show History"&#xff08;显示历史…