相关文章

  1. 《常用类 (一) ----- Arrays数组工具类》
  2. 《常用类 (二) ----- Math类》
  3. 《常用类 (三) ----- BigDecimal和BigInteger大数类》
  4. 《常用类 (四) ----- Random随机数类》
  5. 《常用类 (五) ----- Date日期类和Calender日历类》
  6. 《常用类 (六) ----- String类与字符串》
  7. 《常用类 (七) ----- 包装类》

文章目录

  • Java中字符串存储原理
  • String类常用的构造方法
  • String类中的常用方法
  • StringBuffer
  • StringBuffer和StringBuilder的区别

Java中字符串存储原理


  1. 在Java中只要是用""双引号括起来的都属于String对象。例如:“abc”,“def”,“kll”,"momo"属于4个不同的字符串对象。
  2. 我们创建的字符串对象是直接存储在JVM的“方法区”的“字符串常量池”当中。例如:“abc”,"def"这些字符串创建后就直接存储在了JVM的“方法区”的“字符串常量池”中了,凡是用""双引号括起来的,都会储存在“字符串常量池”中。
  3. 不可变性:在字符串"abc","def"存储在“字符串常量池”中后,我们不能再去改变它的内容。
  4. 复用性:只要在”字符串常量池“已经存在的字符串,我们就可以用引用反复去指向它,不用创建新的字符串。
  5. 在字符串进行拼接的时会产生新的字符串在“字符串常量池”中。

示例

 // 这两行代码表示在底层创建了3个字符串对象,存储在字符串常量池中String s1 = "abcdef";String s2 = "xy" + "abcdef";

 String s1 = "abcdef";String s2 = "xy" + "abcdef";// s3指向new出来的堆内存空间,该空间中存储了"xy"字符串在字符串常量池中的地址String s3 = new String("xy");

注意:

  1. 下列代码一共创建了几个对象?

     String s1 = new String("abc");String s2 = new String("abc");
    //答:new了2个对象在堆区,"abc"字符串对象在字符串常量池中,一共3个对象。
    
  2. 下列情况是true还是false?

         String s1 = "hello";String s2 = "hello";String s3 = new String("hello");String s4 = new String("hello");// s1和s2指向方法区字符串常量池中同一块内存System.out.println(s1 == s2);// true// s1指向常量池中的内存,s3指向堆中内存System.out.println(s1 == s3);// false// s3和s4指向堆中不同的内存System.out.println(s3 == s4);// false// s3和s4的内容相等System.out.println(s3.equals(s4));// true
    
  3. 关于返回值为String类型的方法

    Integer a = 1000;Integer b = 1000;Integer c = 2000;// 等价String s1 = new String(a.toString());String s1 = a.toString();// 等价String s2 = new String(b.toString());String s2 = b.toString();// 等价String s3 = new String(c.toString());String s3 = c.toString();// s1、s2、s3都指向不同的堆内存地址,所以为falseSystem.out.println(s1 == s2);// falseSystem.out.println(s1 == s3);// false

String类常用的构造方法


  1. 直接用String引用指向字符串

        String s = "abc";
    
  2. 向构造方法中传入字符串

      String s = new String("abc");
    
  3. 向构造方法中传入byte数组(将byte数组转换为字符串)

        byte[] bytes = {97,98,99};// 97是a,98是b,99是cString s = new String(bytes);// abc
    
  4. 向构造方法中传入byte数组并设置偏移量和长度(将byte数组中的一部分转换为字符串)

      byte[] bytes = "abc";// 从bytes下标1开始传入长度为2的串String s= new String(s,1,2); // bc
    
  5. 向构造方法中传入char数组(将char数组转换为字符串,对比下面将字符串转换为char数组的方法)

        char[] chars = {"莫", "莫", "大", "胖", "子"};String s = new String(chars);
    
  6. 向构造方法中传入char数组并设置偏移量和长度(将char数组中的一部分转换为字符串)

      char[] chars = {"莫", "莫", "大", "胖", "子"};String s = new String(chars,2,3); "大胖子"
    

String类中的常用方法


一、基本方法

  1. 判断某个字符串是否为空字符串""——boolean isEmpty()

  2. 返回字符串长度——int length()

  3. 在字符串尾部连接指定字符串——String concat(String s)

  4. 去除字符串前后空格——String trim()

  5. 将非字符串的内容转换为字符串——static String valueOf(非字符串内容)

      String sBoolean = String.valueOf(true);// "true"String sInt = String.valueOf(1);// "1"String sDouble = String.valueOf(11.23)// "11.23"//当String.valueOf(传入一个对象引用的时候会自动调用其toString方法)
    

二、找查

  1. 返回字符串指定下标字符——char charAt(int index)

  2. 返回字符串指定下标之后的子串——String substring(int begin)

  3. 返回字符串指定下标区间(左闭右开)的子串——String substring(int begin, int end)

     String s1 = "Momo123";String s2 = s1.substring(2, 4);// "mo",包含开始下标元素,不包含结束下标元素
    
  4. 返回字符串中某个子字符串第一次出现的头部下标——int indexOf(String s)

  5. 返回字符串中某个子字符串最后一次出现的头部下标——int lastIndexOf(String s)

  6. 判断字符串是否以某个子串开始——boolean startsWith(String prefix)

  7. 判断字符串是否以某个子串结尾——boolean endsWith(String suffix)

  8. 判断字符串是否含有某个子串——boolean contains(String s)

三、修改与拆分

  1. 将字符串中所有与目标字符串相同的子串替换为指定字符串——String replace(String target, String replacement)

      String s1 = "http://www.baidu.com";String s2 = s1.replace("http://", "https://");// "https://www.baidu.com"String s3 = "1 + 1 = 2";String s4 = s3.replace("1","2");// "2 + 2 = 2"
    
  2. 把字符串以给定子串为为分界线拆分到String数组中——String[] split(String s)

        String date = "2020-11-30";String[] ymd = date.split("-");// {"2020", "11", "30"}
    

四、转换

  1. 将字符串转换为char数组——char[] toCharArray()
  2. 将字符串转换为byte数组——byte[] getBytes()
  3. 将字符串中所有大写转换为小写字母——String toLowerCase()
  4. 将字符串中所有小写转换为大写字母——String toUpperCase()

五、比较

  1. 按照字典顺序比较字符串大小——int compareTo(String anotherString)

        // 字符串从第一个字母与另一个字符串从第一个字母依次比较,能分大小就不比后面的了int result1 = "abc".compareTo("abc");// 前后相等,返回0int result2 = "abcd".compareTo("abce");// 前小后大,返回-1int result3 = "abce".compareTo("abcf");// 前大后小,返回1
    
  2. 忽略大小写判断两个字符串是否相等——boolean equalsIgnoreCase(String anotherString)

StringBuffer


一、前言
  当进行字符串拼接的时候,例如"abc" + “def” 一共会创建3个字符串对象在“字符串常量池”中,如果有大量的字符串拼接则产生的新字符串会在常量池中占用大量内存,StringBuffer就是用来解决这个问题的,其底层是一个byte数组,因此王StringBuffer中存放字符串实际上放在byte数组中了,默认初始化容量为16。

二、常用方法

方法 说明
append(数据值) 把指定数据值追加到字符串末尾
delete(int start, int end) 删去指定范围的子串
deleteCharAt(int index) 删去指定下标的字符
insert(偏移量, 数据值) 插入数据值到指定下标
reverse() 翻转字符串
 // 创建一个指定容量为32的字符串缓冲区对象(byte数组)StringBuffer buffer = new StringBuffer(32);// 可以拼接任何基本数据类型到字符串缓冲区中// 如果在拼接数据的时候容量满了会进行数组扩容(arrcopy)// 所以使用StringBuffer的时候最好指定一个合适的容量优化内存占用(扩容越少效率越高)buffer.append("a");buffer.append(3.14);buffer.append(true);System.out.println(buffer.toString());// "a3.14true"StringBuffer buffer2 = new StringBuffer("123");buffer2.append("abc");buffer2.insert(1,"KLL");System.out.println(buffer2);// 1KLL23abcbuffer2.delete(1,4);System.out.println(buffer2);// 123abcSystem.out.println(buffer2.reverse());// cba321

StringBuffer和StringBuilder的区别


 StringBuffer中的方法都有synchronized关键字修饰,而StringBuilder中没有,前者线程安全,后者非线程安全。

常用类 (六) ----- String类与字符串相关推荐

  1. 【JavaSE】常用类3[String类、StringBuffer、StringBuilder]

    常用类3 ①.String类 -String常用方法 -String案例演示 ②StringBuffer和StringBuilder -StringBuffer -StringBuilder -Str ...

  2. java str2date,java date类与string类实例代码分享

    Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclongge ...

  3. JavaSE(七)——Scanner类、String类

    文章目录 1. Scanner类 2. String类 2.1 定义 2.2 常见转换 2.3 字符串赋值 2.4 String类的判断功能 2.5 String类的获取功能 2.6 String类的 ...

  4. java处理字符串_Java 字符串常用操作(String类)

    字符串查找 String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法. 1.indexOf(String s) 该方法用于返回参数字符串s在指定字符串中首次出现的索引位置, ...

  5. Java常用类库(Object类、String类、StringBuffer类、包装类、Math类、System类)详解

    常用类库 java.lang java.lang包下放置了Java开发中常用的类和接口,所以为简化该包下类的使用,java.lang包下的类在使用时不需要导入这些类 java.lang包下常用类有: ...

  6. JavaSE——常用类库(String类)

    第1节 常用类库--String 因为String相对之前的类来说更加常用一些,所以对字符串类进行专门的整理. 1. 概述 String类表示字符串,Java中的所有字符串文字都实现为此类的实例. 字 ...

  7. java基础知识--(常用类)String类

    8.01 String简介 String(字符串常量)概述 String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 字符串是常量: ...

  8. 17.Java常用实用类之String类中常用的方法以及一般应用场景,final关键字

    文章目录 1.String类学习 1.1.什么是String类 1.2.String类中常用的方法 1.2.1. 构造方法 1.2.2.public int length() 1.2.3.public ...

  9. Java的API及Object类、String类、字符串缓存区

    Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Object:Object类是Java语言中的根类,即所有类的父类. equ ...

最新文章

  1. 读书:有趣 -- 酒鬼与圣徒
  2. 如何添加团队成员,并为团队成员分配访问权限(转载)
  3. mysql 数据迁移java_使用jdk进行数据迁移(sqlite迁移mysql)
  4. kettle 脚本 java_Kettle 执行SQL脚本
  5. 华为鸿蒙系统腾讯首测,华为鸿蒙系统首测,速度超安卓60%?谷歌该咋想,咱也不敢问呐...
  6. uni-app使用input框 v-model双向绑定不起作用解决方案
  7. 数据结构实验之二叉树的建立与遍历
  8. zbb20171215 bootstrap 日期控件.rar
  9. Kyligence 行业峰会成功举办,“智能数据云”引领数字化转型未来
  10. 圣思园Spring精髓-Spring的底层设计思想
  11. 教程篇:《基础模块4》金蝶K3WISE15.0-客户端安装与卸载
  12. 操作系统中ESP和MSR分区
  13. 对角占优矩阵(Diagonally-dominant Matrix)
  14. js 限制鼠标移动范围
  15. 使用钉钉自定义机器人发信息
  16. python随机密码生成以整数17为随机数种子_简述pythonpytorch 随机种子的实现
  17. 手游无限多开器安卓版_手游多开器安卓版-手游多开器手机版 _5577安卓网
  18. 一种RC滤波电路的验证
  19. Java 比较日期/时间的大小
  20. android10.0(Q) Settings 添加设置项——动态方式

热门文章

  1. PLSQL Split分割字符串
  2. centos下安装JDK8的方法
  3. 深度解析javascript中的浅复制和深复制
  4. 《孙哥说Spring5》学习笔记
  5. SpringBoot + Vue 开发前后端分离的旅游管理系统
  6. 【小型JavaFx项目】文字小冒险游戏
  7. 春天到了,减肥机器人也到了。
  8. 【网络安全工程师面试合集】—邮件协议是如何被安全人员利用的?
  9. exchange邮箱服务器端追踪某用户发送的邮件(发送状态、时间、主题等等信息)
  10. 抓包分析arp攻击Linux,从抓包分析角度分析arp攻击