[java]String类

news/2024/7/5 4:28:19

String表示字符串类型。

注意c中没有表示字符串的类型。

 String内部包含如下两个变量。

 

java中String结尾没有/0,java不需要/0标注结束位置。 

 str2代表指向的对象内容为空,str3代表不指向任何对象。

 

 

 str1和str2指向对象不一样,所以不相等

 可以用如下方式判断对象中的内容是否相等。

这个equal是string自己的equal。 

 

 

 下面的是忽略大小写进行比较。

 

 利用charAt操作字符串中的字符。

 indexof可以查看某个字符在哪个位置。

 还可以指定从哪个位置开始找。

 

 lastInderof是从后往前找但返回结果还是从前往后数的数。

 下面代表从第6个位置开始往前找第一个o。

返回的是数组下标。

 valueof将其他类型转换为字符串。

 我们发现valueof可以将各种类型转换为字符串。

 变大小写。

 

 下面用replace可以进行替换,替换不是在原先字符串本身上改变的。

 

 

我们发现按.分割不能打印。

 我们可以用两个斜杠进行转义。

 str3中如果要用\作字符至少需要两个\,split中如果以\分割,至少有4个。

 如果想以不同的字符作为间隔,中间要加"|"。|

1. 字符 "|","*","+" 都得加上转义字符,前面加上 "\\" .
2. 而如果是 "\" ,那么就得写成 "\\\\" .
3. 如果一个字符串中有多个分隔符,可以用 "|" 作为连字符

还可以多次分割。 

subString也是不会改变原先字符串的,只是赋值给ret后去掉一部分字符串。 原先的字符串会放到常量池,所有被双引号引起来的都会进常量池。

 trim能够删除字符串两边的空格。

str1指向的是字符串在常量池中的地址。 和new出来的str2的内容不一样。

 下面这俩都在常量池中,所以地址一样。

String 是一种不可变对象 . 字符串中的内容是不可改变。字符串不可被修改
1. String 类在设计时就是不可改变的, String 类实现描述中已经说明了
value被private修饰,并且类中没有实现调用value的方法,所以无法改变value的值

String 类中的字符实际保存在内部维护的 value 字符数组中
1. String 类被 fifinal 修饰,表明该类不能被继承
2. value 被修饰被 fifinal 修饰,表明 value 自身的值不能改变,即不能引用其它字符数组,但是其引用空间中 的内容可以修改。

  • 字符串修改

下面是上面的实现原理。不建议使用+=进行拼接。因为中间创建对象产生了很多临时对象。降低效率。

  •  StringBuilderStringBuffffer
由于 String 的不可更改特性,为了方便字符串的修改, Java 中又提供 StringBuilder StringBuffffer 类。

上面的是在同一个对象中修改的。


下面代码创建了2个对象。一个是双引号引起来的字符串对象,new了一个String对象。

String str = new String("ab");

下面代码创建了6个对象。两个双引号引起来的2个对象,new了2个对象。字符串拼接会产生StringBuilder对象。拼接后的对象赋给str会调用toString,会创建一个string对象。 

String str = new String("a") + new String("b");

 字符串常量池的

1.双引号引起来的 统一放到常量池

2.如果常量池有 那么 就不再额外存储了


http://lihuaxi.xjx100.cn/news/1049376.html

相关文章

机器学习——TensorFlow2

1.创建矩阵 1. 全零矩阵:tf.zeros(shape, dtypeNone, nameNone) - shape参数指定了矩阵的形状,可以是一个整数列表或元组。 - dtype参数指定了生成矩阵的数据类型,默认为tf.float32。 2. 全1矩阵:tf.ones(shape, dtypeNone, name…

基于matlab使用 CSI-RS 的 NR 下行链路发射端波束细化

一、前言 此示例演示了使用 5G 工具箱中的信道状态信息参考信号 (CSI-RS) 的下行链路发射端波束细化过程。该示例展示了如何在散射环境中向不同方向传输多个CSI-RS资源,以及如何根据参考信号接收功率(RSRP)测量结果选择…

( “树” 之 DFS) 337. 打家劫舍 III ——【Leetcode每日一题】

337. 打家劫舍 III 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root。 除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。…

Java版本的工程项目管理系统源代码之工程项目管理系统面临的挑战

​ ​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承包…

vba:文件夹和文件夹的处理,dir

Option Explicit 1 判断文件夹是否存在 dir函数的第二个参数是vbdirectory时可以返回路径下的指定文件和文件夹,如果结果为"",则表示不存在。 Sub w1() If Dir(ThisWorkbook.path & "\2011年报表2", vbDirectory) &q…

测绘与设计之间的鸿沟:坐标系,教你如何将CAD与测绘数据准确叠加

一、背景 2008年,我国推出了2000国家大地坐标系(以下简称国家2000坐标系),截至2022年,国家2000坐标系在自然资源领域已经取得了较高的普及率,但在工程建设领域的普及率依旧比较低,很多工程项目…

如何将matlab的m文件转换成python文件

因为matlab的内存实在太大了,所以我只在实验室电脑安装了matlab,自己电脑没有安装,现在跑实验需要把matlab文件转成python文件。在网上找到可以使用smop小工具。 我是在本地的anaconda转换的。先创建一个新环境到指定路径 conda create --pr…

如何做好技术管理

1、帮助员工做好个人中长期发展目标规划 主管应该跟员工一起确认员工任期内的中长期成长和发展目标,让员工能够在任期内发挥最大的作用和价值,同时能够尽可能地让员工在任期内达成自己期望的成长目标。对管理者来说有一件很重要的事情,就是能…