Java基础面向对象(String类)

String

特点

是内存中常量, 值在内存中一旦创建, 不可改

更改String类型引用的值本质上是将引用指向了一个新的字符串地址

        String s1 = "abc";String s2 = s1;//引用s1的地址赋值给了s2
​s2 += "edf";//让s2指向新字符串
​System.out.println("s1: "+s1);//abcSystem.out.println("s2: "+s2);//abcedf

创建

第一种创建方式

双引号直接赋值

String 引用名 = "值";
第二种创建方式

构造赋值

String 引用名 = new String("值");

"串池":

全称字符串常量池. String是开发过程中使用频率最高数据类型, 且其复用的频率也很高, 为了防止复用时反复创建空间导致的空间浪费, 在方法区中设立了串池, 用于存储String的数据, 实现字符串复用, 减少空间浪费.

区别
  1. 第一种创建方式是直接使用串池. 在使用时先查找串池中是否存在指定内容, 如果存在直接指向, 不存在则先在串池中创建指定内容再指向

  2. 第二种创建方式是间接使用串池. 无论如何都会开辟对象空间, 如果串池中存在指定内容, 则直接存储对应串池地址, 不存在则先在串池中创建再存储该地址

//双引号直接赋值String s1 = "abc";String s2 = "abc";System.out.println(s1 == s2);//t//利用构造String str1 = new String("edf");String str2 = new String("edf");System.out.println(str1 == str2);//f
​String str3 = new String("abc");System.out.println(s1 == str3);//f

可变长字符串

  • StringBuffer: JDK1.0 线程安全, 效率低

  • StringBuilder: JDK5.0 线程不安全,效率高

特点
  1. 不是常量, 值可以更改

  2. 无法使用串池

  3. 必须通过构造创建

  4. 无法使用运算符操作内容, 必须调用方法

    1. append("值"): 将内容追加到末尾

    2. insert(下标, "值"): 将内容插入到指定下标位置

    3. delete(起始下标, 结束下标): 将起始下标-结束下标前一位的内容删除

    4. reverse(): 反转内容

    public class Test_StringBuilder {public static void main(String[] args) {StringBuilder sb = new StringBuilder();// StringBuilder sb2 = new StringBuilder("abc");//追加一些内容sb.append("abcdefg");//在下标为0的位置上插入一些内容sb.insert(0, "1234");//1234abcdefg//删除一些内容sb.delete(0, 4);System.out.println(sb);//abcdefgSystem.out.println(sb.reverse());//gfedcba}
    }

实际开发中, 对一个字符串复用的频率一定远远高于更改它的频率, 所以能够使用串池且书写更方便的String是开发中的主力. 可变长字符串只有当功能中反复更改内容时做补充使用

面试常见题: String & StringBuffer & StringBuilder的区别

  1. String与可变长字符串的区别:

    • String是内存中的常量, 值不能改, 可变长字符串值可改

    • String可以使用串池, 可变长字符串无法使用串池

  2. 两个可变长字符串的区别:

    JDK版本+线程安全性+效率

 

与String之间的转换
  1. String转可变长字符串: 利用构造

    StringBuilder 引用名=new StringBuilder(String字符串);
  2. 可变长字符串转String: 利用toString()

    String 引用名=StringBuilder引用名.toString();
        String s1 = "abc";//转可变长字符串StringBuilder sb1 = new StringBuilder(s1);//转StringString s2 = sb1.toString();

String的常用方法

  • String引用名.方法名(实参列表)

字符串的下标使用也不可越界, 否则执行时报出java.lang.StringIndexOutOfBoundsException字符串下标越界异常

  1. char charAt(下标): 获取指定下标位置的字符

  2. boolean contains(值): 判断指定值在字符串中是否存在

  3. boolean startsWith(值): 判断字符串是否以指定值开头

  4. boolean endsWith(值): 判断字符串是否以指定值开头

  5. boolean equals(值): 比较双方内容是否相同, 区分大小写

  6. boolean equalsIgnoreCase(值): 比较双方内容是否相同, 不区分大小写

  7. byte[] getBytes(): 将字符串内容以byte数组的方式返回

    • 将每个元素转换为数字

  8. char[] toCharArray(): 将字符串内容以char数组的方式返回

  9. int indexOf(值): 获取指定值在字符串中第一次出现的下标, 不存在返回-1

  10. int lastIndexOf(值): 获取指定值在字符串中最后一次出现的下标, 不存在返回-1

  11. boolean isEmpty(): 判断内容是否为空

    • 不为null值判断, 判断的为长度为0

  12. int length(): 获取字符串长度

  13. String replace(旧值, 新值): 将字符串中的旧值替换为新值

    • 会替换所有匹配的旧值

  14. String[] split(分隔符): 将字符串根据分隔符进行分割存入数组, 不保留分隔符

  15. String substring(下标): 将字符串从指定下标截取到末尾

  16. String substring(起始下标, 结束下标): 将字符串从起始下标截取至结束下标前一位

  17. String toLowerCase(): 转全小写

  18. String toUpperCase(): 转全大写

  19. String trim(): 去除字符串的前后空格

今日掌握

  1. getClass()的作用于instanceof判断的区别

  2. hashCode与equals的重写原因

  3. equals的重写步骤 (+hashCode的重写规则)

  4. 垃圾回收机制及垃圾对象的判断标准

  5. 自动拆箱和封箱的概念

  6. String转基本类型的语法

  7. 整数缓冲区的概念

  8. String & StringBuffer & StringBuilder的区别

  9. String两种创建方式的区别

  10. 什么是串池?

  11. String的重点常用方法

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

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

相关文章

【C++】深入优化计算题目分析与实现

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯第一题:圆的计算我的代码实现代码分析改进建议改进代码 老师的代码实现代码分析可以改进的地方改进代码 💯第二题:对齐输出我的代码实现…

6.824/6.5840 Lab 3: Raft——Part 3B3C

芙蓉花又栖满了枝头 奈何蝶难留 漂泊如江水向东流 望断门前隔岸的杨柳 寂寞仍不休 我无言让眼泪长流 ——山外小楼夜听雨 完整代码见: https://github.com/SnowLegend-star/6.824 在完成Lab之前,务必把论文多读几遍,力求完全理解Leader选举、…

LeetCode - #150 逆波兰表达式求值

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

【C++】continue语句、goto语句

1、continue 语句 作用&#xff1a;在循环语句中&#xff0c;跳过本次循环中余下尚未执行的语句。继续下一次循环。 注意&#xff1a;continue只能用于循环中。 示例&#xff1a; 代码&#xff1a; //continue的用法 #include<iostream> using namespace std; int ma…

最长最短单词

最长最短单词 C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 输入1行句子&#xff08;不多于200个单词&#xff0c;每个单词长度不超过100&#xff09;&#xff0c;只包含字母、空格和逗号。单词由至少一…

ESP32项目 --- 智能门锁(WiFi 蓝牙 OTA)

1 项目简介 1.1 项目概述 本项目是实现一款智能门锁中的智能控制部分, 可以应用在家庭, 办公室等任何使用门锁的场所. 本项目实现了以下主要功能: &#xff08;1&#xff09;通过按键配置密码 &#xff08;2&#xff09;通过按键输入密码开锁 &#xff08;3&#xff09;录…

洛谷题单-入门2-分支结构-python-下

找出出现的最早的最大值 count 0 list_number [] while True:list_number.append(list(map(int, input().split())))count 1if count 7:breaklist2_number_total []for i1,i2 in list_number:list2_number_total.append(i1i2)target max(list2_number_total)index 0 if…

框架模块说明 #05 权限管理_03

背景 权限设计可以分为两个主要方面&#xff1a;操作权限和数据权限。前两篇文章已经详细介绍了操作权限的设计与实现&#xff0c;以及如何将其与菜单关联起来的具体方法。本篇将聚焦于数据权限&#xff0c;为您深入讲解相关的设计与实现方式。 全局开关 Value("${syst…

Linux网络编程之---多线程实现并发服务器

下面我们来使用tcp集合多线程实现并发服务器 一.服务端 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h>typedef struct sockinfo {char ip[16];unsigne…

Linux C/C++编程之静态库

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com…

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;&#xff0c;又称互联网协议。是OSI中的网络层通信协议&#xff0c;用于跨网络边界分组交换。它的路由功能实现了互联互通&#xff0c;并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…

uniapp实现加密Token并在每次请求前动态更新(vue、微信小程序、原生js也通用!)

导语&#xff1a;在Web开发中&#xff0c;Token作为一种身份验证的机制&#xff0c;被广泛应用于前后端交互过程中。本文将为大家介绍如何在每次请求前动态设置加密的Token&#xff0c;并在请求一次后使Token值加1&#xff08;或其他动态改变的逻辑&#xff09;&#xff0c;从而…

IDL学习笔记(二)IDL处理卫星数据

IDL处理卫星数据 HDF文件数据集属性通用属性 常用HDF4操作函数常用的HDF5操作函数读取HDF文件的一般步骤 HDF4文件读取-----数据信息查询HDF4文件读取示例-----目标数据TIFF输出 HDF文件 数据集属性 数据集名称&#xff0c;是“&#xff1a;”前的一部分&#xff0c;不是long_…

论文阅读——量子退火Experimental signature of programmable quantum annealing

摘要&#xff1a;量子退火是一种借助量子绝热演化解决复杂优化问题的通用策略。分析和数值证据均表明&#xff0c;在理想化的封闭系统条件下&#xff0c;量子退火可以胜过基于经典热化的算法&#xff08;例如模拟退火&#xff09;。当前设计的量子退火装置的退相干时间比绝热演…

TCP/IP协议簇自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 曾经&#xff0c;我只知道socket函数能进行网络间数据的通信&#xff0c;知道tcp/ip协议也是用来进行网络数据…

c++领域展开第一幕——入门基础(命名空间、iostream、缺省参数、函数重载、nullptr、inline(内联函数))超详细!!!!

文章目录 前言一、c的第一个程序二、命名空间2.1 namespace 的价值2.2 namespace 的定义2.3 命名空间的使用 三、c的输入和输出四、缺省参数五、函数重载六、nullptr七、inline总结 前言 今天小编带着大家进入c的大门&#xff0c;虽然c难&#xff0c;但好事多磨&#xff0c;一起…

DM-VIO(ROS)+t265配置运行记录(ubuntu18.04+ros melodic)

在工作中需要对DM-VIO算法进行测试&#xff0c;于是配置并记录了一下&#xff1a; 首先运行ros接口的dm-vio&#xff0c;一定要先配置源码 https://github.com/lukasvst/dm-vio在这个网址把源码下载下来并解压&#xff0c;并安装一下依赖&#xff1a; sudo apt-get install …

基于Java Springboot成人教育APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

基于Java Springboot个人财务APP且微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 微信…

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕

PotPlayer 最新版本支持使用 Whisper 自动识别语音生成字幕 设置使用下载地址 设置 使用 下载地址 https://www.videohelp.com/software/PotPlayer