首页 > 编程语言 >【Java基础】String类 && StringBuilder类

【Java基础】String类 && StringBuilder类

时间:2023-11-21 21:44:48浏览次数:30  
标签:Java String int StringBuilder 内存 && 字符串 常量

String类

String类特点

  1. 字符串底层是字节类型的数组:byte[]
  2. Java程序中所有双引号字符串,都是String类的实例(对象)
  3. 字符串在创建之后,其内容不可更改
  4. 字符串虽然不可以改变,但是可以被共享(通过字符串常量池)
    字符串常量池(StringTable)
    --> 当使用双引号创建字符串对象时,会检查常量池中是否存在该数据。如果不存在,就在字符串常量池中创建;如果存在,就直接复用
    --> 内存位置:jdk7之前:位于方法区内存;jdk7及之后:位于堆内存

String类两种构建方式的区别

  1. 双引号直接创建
    在字符串常量池中进行维护
  2. 构造方法创建
    在堆内存中独立空间进行维护


这里String s2 = new String("abc");有两步操作:
(1)参数——实例"abc"会在字符串常量池中维护,这里因为上一句代码已经创建了"abc",因此直接复用。
(2)在堆内存中new了一块新的空间维护实例s2,实例s2是拷贝的字符串常量池中实例"abc"的副本。因为String类的底层是byte[],因此s2内存中存储的实际上是字符串常量池中"abc"的地址。



Java 语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过 StringBuilder(或 StringBuffer)类及其 append 方法实现的
StringBuilder和StringBuffer的定义、构造、成员方法等都是相同的,不同之处在于StringBuffer是多线程安全的,相应执行速度会慢;而StringBuilder是线程不安全的,相应的执行速度会快。



这个答案是true,因为是字符串常量拼接,因此Java的常量优化机制会优化


String类内容比较

  1. boolean equals(Object anObject):将此字符串与指定的对象比较。
  2. boolean equalsIgnoreCase(String anotherString):将此 String 与另一个 String 比较,不考虑大小写。

String类遍历

  1. char[] toCharArray():将此字符串转换为一个新的字符数组。
    public static void traverse1(String s) {
        char[] c = s.toCharArray();
        for (int i = 0; i < c.length; i++) {
            System.out.println(c[i]);
        }
    }
  1. char charAt(int index):返回指定索引处的 char 值。
    public static void traverse2(String s) {
        int len = s.length();
        for(int i = 0; i < len; i ++ ) {
            System.out.println(s.charAt(i));
        }
    }

String类的字符串截取

String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串[beginIndex,String.length())。
String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串[beginIndex,endIndex)。

String类的字符串替换

String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。

String类的字符串切割

String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。

注意:以".""+"等为规则切割时需要加转义字符变成"\\.""\\+"才能切割成功

StringBulider类

  • 可以提高字符串的操作效率,尤其是对字符串拼接操作,快了超级多!!!

String拼接"+"会自动new一个StringBuilder,拼接完之后又转换成String,也就是说每拼接一次,就会有两个堆内存被占用

而StringBuilder是手动new了一个StringBuilder对象,所有的拼接操作都在同一个内存地址中存储



                 StringBuilder中可以添加任意数据类型,但是都会被转换为字符串存储。

String转StringBulider:
       

标签:Java,String,int,StringBuilder,内存,&&,字符串,常量
From: https://www.cnblogs.com/Eve7Xu/p/17846828.html

相关文章

  • 【Java基础】内存分配
    1.栈方法运行时所进入的内存2.堆需要new的引用数据类型会在堆内存中开辟空间并产生地址堆内存中的数据在生命周期结束后会由垃圾回收器不定时回收(C语言需要手动写代码清理释放内存空间)3.方法区字节码文件加载时进入的内存4.本地方法栈(辅助虚拟机)---了解5.寄存......
  • JavaWeb--JSP脚本
     JSP的缺点     ......
  • Java8新特性lambda学习
    Lambda表达式Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。本质:作为函数式接口的实例,没有接口就没意义了.//简单......
  • idea报错Java HotSpot(TM) 64-Bit Server VM warning Options -Xverifynone and -nove
    问题描述我的:IDEA的版本为:2021.3‍最近在使用idea运行SpringBoot时,idea总是显示报错信息,报错信息如下:‍​​‍解决方法‍第一步:选择下图的EditConfigurations‍​​‍第二步:在跳转出的界面中找到Modifyoptions这个选项,点进去‍​​‍第......
  • java list转字符串常用方法
    使用标准toString()方法List.toString()是最简单的,但它在开头和结尾添加方括号,每个字符串用逗号分隔符分隔。缺点是我们不能用另一个分隔符替换逗号,也不能去掉方括号。publicstaticvoidmain(String[]args){//creatingalistwithstrings.List<String>......
  • Java字符串分割[split()]和截取[substring()]
    字符串的分割:一般自字符串的分割常用的方法是java.lang包中的String.split()方法,返回是一个字符串数组。语法:publicString[]split(Stringregex,intlimit)参数:regex -- 正则表达式分隔符。limit --分割的份数。比如:需要分割字符串中的每个字符(空格也会被看做字符),split()中......
  • 有趣的Java之@Autowired属性注入问题
    ......
  • Java方法
    01:什么是方法 Java方法是语句的集合,它们在一起执行一个功能。 02:方法的定义和调用方法的定义Java的方法类似于其它语言的函数,是-段用来完成特定功能的代码片段,一般情况下,定义一个方法包含以下语法:方法包含一个方法头和一个方法体。下面是一个方法的所有部分:修......
  • Java:泛型和通配符的区别
    一开始我学习通配符的时候,我觉得这个和泛型T不都一样吗?都是表示未确定的类型,有何区别举一个下面的例子:@Testpublicvoiddemo1(){List<Object>list=null;List<String>listString=newArrayList<>();List<Double>listDouble=n......
  • java读取.properties文件,通过key获取value
    1.将xx.properties文件放置在src/main/resources/config目录下(config是自己建的目录)2.通过ApplicationHome类获取target路径ApplicationHomeapplicationHome=newApplicationHome(this.getClass());Stringpath=applicationHome.getSource().getParent();3.拼......