当前位置: 首页 > article >正文

(java) String 字符串

前言
本篇内容不多,单独介绍java中的字符串String,介绍了字符串的存储原理(辅助理解),以及其主要使用的方法,同时也介绍了StringBuilder可变字符序列

1. String 字符串

字符串一旦创建,就不可改变—引出常量池。

常量池概念:字符串的存储是在堆中的常量池中,当java创建一个字符串时,先到常量池寻找有没有相同的字符串,如果有,就会直接使用字符串的地址,如果没有,就在常量池中创造一个字符串。

对于常量池的理解:下面例子中的str1和str2
在这里插入图片描述

如果是出现了开辟新空间的情况:下面例子中的str3和str2

在这里插入图片描述

案例:
此处如果对使用==比较字符串有疑问,本篇最后补充了一道面试小题来解释这一点

//根据输出结果,解释原理
        String str1 = "123";
        String str2 = "123";
        System.out.println(str2 == str1);//true 常量池

        String str3 = new String("123");
        System.out.println(str2 == str3);//false 新开辟空间后,使用常量池中字符串存储到新地址

        String str4 = "1";
        String str5 = str4 + "23";
        System.out.println(str5 == str1);//false 只要使用了+连接符,就可以认为是new了一个新的字符串

        String str6 = "1"+"23";//编译器ideal帮助我们合并了字符串
        System.out.println(str6 == str1);//true


//经典小案例:根据常量池解释
        String str2 = "aaa";
        String str3 = "bbb";
        str2 = str3;
        str3 = "ccc";
        System.out.println(str2);//bbb

//对于字符串定义时,其构造器的重载,可以输入空字符串、字符串、byte数组、char数组
        String str = new String();//空字符串
        String str1 = new String("hello");//hello

        char[] str9 = {'A','B','C'};
        String str8 = new String(str9);
        System.out.println(str8);//ABC

        byte[] str6 = {97,98,99};
        String str7 = new String(str6);
        System.out.println(str7);//abc

String提供的常用方法


String str1 = "abcdefg";
System.out.println(str1.length());//arr.length()返回字符串长度

String str1 = "拓跋焘";
System.out.println(str1.charAt(0));//arr.charAt(index)输出索引位置字符

String str1 = "abcd";//确定相等,返回布尔值,包含不区分大小写的比较
System.out.println(str1.equals("ABCD"));//false
System.out.println(str1.equalsIgnoreCase("ABCD"));//true
//补充 str.toLowerCase();转小写  str.toUpperCase();转大写



String str1 = "012345";
System.out.println(str1.substring(3));//345
System.out.println(str1.substring(3,4));//3 此处需要注意其表示意思在后索引位置之前停止(包前不包后)
//此处补充 indexOf 和lastIndexOf 找出某一部分在字符串中出现的索引位置,可能配合substring进行切割

String str1 = "11111tmd1245";
System.out.println(str1.replace("tmd","***"));//repalce替换部分字符串

String str1 = "11111tmd1245";
System.out.println(str1.contains("tmd"));//comtains确认是否包含字符串

String str1 = "张三";
System.out.println(str1.startsWith("张"));//startWith判断是否以此开头 也有endWith方法


String str1 = "今+天+天+气+真+好";
String[] str = str1.split("\\+");
for (int i = 0; i < str.length; i++) {
     System.out.println(str[i]);
}//此处小心,因为arr.split(正则表达式)所以,对于点或者加号等有特殊含义的,可以选择先替换,或者使用转义符


2. StringBuider 可变字符序列

2.1 String/StringBuilder区别(经典面试题)

可变性:String对象创建之后即不可改变,而StringBuilder对象是可变字符序列。

StringBuilder是直接对对象本身进行操作,并没有生成新的对象,所以针对频繁改变内容的字符串,可以使用StringBuilder。

补充:曾经还出现过StringBuffer 就是StringBuilder的线程安全版本

2.2 StringBuilder常用方法

  1. length() 获取序列长度
  2. append() 追加内容
  3. insert() 指定位置插入内容
  4. delete 指位置删除字符
  5. replace() 指定位置删除字符
  6. reverse() 反转序列
  7. toString() 将 StringBuilder 转换为 String。


补充:经典面试小题:== 与 equals 的区别

  • 对于 == 来说,其对于普通数据类型,直接比较内容,而对于引用数据类型,比较的是地址。

  • 对于equals来说,其适用于引用数据类型,比较的是内容,也就是说,如果我们自定义类需要使用equals方法,自己重写equals方法,如果一定要比较普通数据类型,也要将其装箱为其所对应的引用数据类型。

补充面试题目的就是为了解释为什么前面解释String存储原理时,使用==来进行判断,而不用我们平时对字符串比较时使用equals


http://www.kler.cn/a/500151.html

相关文章:

  • scala基础学习_方法函数
  • simulink建模与仿真代做matlab程序代编设计帮做电力电子电机控制
  • Django Admin中添加自定义按钮与默认按钮并列
  • Objective-C语言的网络编程
  • 蓝桥与力扣刷题(389 找不同)
  • 设计一篇利用python爬虫获取1688详情API接口的长篇软文
  • 芯片:为何英伟达的GPU能在AI基础设施领域扮演重要角色?
  • 【网络协议】交换机概念与配置(第一部分)
  • _STM32关于CPU超频的参考_HAL
  • RabbitMQ介绍及安装(基于docker)
  • 服务器多节点 Grafana、Prometheus 和 Node-Exporter Docker版本部署指南
  • Bash语言的正则表达式
  • 9.java中String,StringBuilder,StringBuffer 什么区别
  • MySQL教程之:与服务器的连接和断开连接
  • 图像处理 | 图像二值化
  • 财务自动化用Python还是RPA?各有什么优缺点
  • el-tab-pane 的label怎么显示很多数据
  • 【Leetcode-找到所有数组中消失的数字】利用标记出现数组中出现过的数字解决数组中消失的数字问题
  • 【开源免费】基于SpringBoot+Vue.JS共享汽车管理系统(JAVA毕业设计)
  • Cannot find -lgL
  • 【IEEE出版,连续4年EI收录,检索稳定 |南京航空航天大学主办,航空航天交叉研究院承办】第五届传感器与信息技术国际学术会议(ICSI 2025)