相关文章

  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. 系统相机裁剪比例_《零基础轻松学会PS》二章第3节:裁剪工具的使用方法
  3. Winform中设置ZedGraph鼠标悬浮显示距离最近曲线上的点的坐标值和X轴与Y轴的标题
  4. 第五站 使用winHex利器加深理解数据页
  5. Android Ubuntu 安装问题FAQ
  6. S3C2440裸奔篇之MMU
  7. html表单基础知识,【学习笔记】html基础知识第四更/与用户交互!(表单标签)...
  8. POSIX 信号量学习与思考
  9. Leetcode 17.电话号码的组合(回溯法)
  10. python识别银行卡数字_Python银行卡数字识别项目 (Opencv)
  11. JSP标签JSTL(3)--迭代操作
  12. 粒子滤波与PF目标追踪
  13. Java从入门到精通(视频教程+源码)
  14. 二叉树的叶结点/ 树的深度计算
  15. “IndentationError: unindent does not match any outer indentation level“ 错误解决
  16. 通过poi导出带图片的Excel表格
  17. 关于E-R(实体-联系)图
  18. 平台注册加入微信验证码机制。
  19. 机器学习算法面经(阿里京东拼多多百度等)
  20. OSPF——基本概念2(多区域与Vlink)

热门文章

  1. echarts 设置各省份颜色
  2. 成都电子神技大学模拟题(取模运算)
  3. Mysql 存储过程基本语法
  4. HDU2553_N皇后_位运算DFS
  5. Sybase:数据类型(对比sqlserver)
  6. 信息系统项目管理07——项目成本管理
  7. 那年我学过的Spring笔记
  8. 那年学过的Java笔记一SE基础
  9. SELinux系列(十二)安全上下文的修改和设置(chcon和restorecon命令)
  10. 查看Windows系统的开机、关机时间、开机时长等信息