String类分析(阿里云开发者社区学习笔记)

String 类简介

1.String不是一个基本数据类型,只是一种JVM提供的一种已封装好的引用数据类型,底层就是char[]的特殊包装应用。
2.从JDK1.9开始String类之中的数组类型采用了byte类型数组:private final byte value []
从JDK1.8以前String类之中的数组类型采用了char类型数组:private final char value[]

String的实例化方式

1.直接赋值,创建匿名对象。

String str = "你好";

2.调用String类的构造方法


String str2 = new String(“你好”);

字符串比较

使用==对于基本数据类型是比较数据值是否相等,对于引用数据类型是比较内存地址。所以用于String类是比较的其地址。
equals()方法是比较的字符串内容是否相等。
所以比较应该是这样:

String strA = "Hello";
String strB ="Hello";

System.out.pringln(strA == strB); //false

System.out.pringln(strA.euqals(strB))//true

注意:
如果从键盘输入字符串进行比较可能接收到null值,那么系统就会显示NullPinterException异常,那么我们就可以将input.equals(“Hello”)替换成"Hello".equals(input);
equals()方法里面提供有一个可以回避null的判断,所以如果将字符串常量写在前面,那么调用equals()方法的时候永远都不可能出现“NullPointerException”,字符串是一个匿名对象,匿名对象一定是开辟好堆内存空间的对象

字符串常量

String str = “Hello”;
这样创建的是一个String类的匿名对象,所谓的String对象的直接赋值只是将一个匿名对象设置一个具体的引用名字。

字符串修改分析

String类最大的缺点就是他是数组一旦开辟了堆空间之后长度就固定了,那么我们想修改怎么办呢?
一般的方法是这样的:

protected static  void stringTest(){
        String str = "Hello";//创建了一个String对象"Hello"
        str += "World";//创建了一个String匿名对象“World”,然后将str与它相加开辟一个新的堆空间,
                      // 将str的栈修改对应到“Hello World”堆空间
        str = str +"!";//匿名对象: "!" ,然后又与将两者相加,将str的栈指向新对象的堆。
        System.out.println(str);
    }

字符与字符串

String.charAt(int index): 获取指定位置的字符
toCharArray(): 把字符中的数据以字符数组的字符的形式返回。

字符串的操作

比较

字符串比较里面最为常用的方法就是equals()方法

NO方法名称类型描述
1public boolean equals(String anObject)普通方法区分大小写的相等判断
2public boolean equalsIgnoreCase​(String anotherString)普通不区分大小写的相等判断
3重点public int compareTo​(String anotherString)普通进行字符串大小比较,该方法返回一个int数据,该数据有三种取值:大于(>0),小于(<0),等于(=0)
4public int compareToIgnoreCase​(String str)普通不区分大小写进行字符串大小写比较

查找

从一个完整的字符串之中查找子字符串的存在就属于字符串查找操作,在String类里面一共提供有如下的几个查找方法

NO方法名称类型描述
1public boolean contains​(String s)普通判断子字符串是否存在
2public int indexOf​(String str)普通从头查找指定字符串的位置,找不到返回-1
3public int indexOf​(String str,int fromIndex)普通从指定位置查找指定字符串的位置
4public int lastIndexOf​(String str)普通由后向前查找指定字符串的位置
5public int lastIndexOf​(String str,int fromIndex)普通从指定位置由后向前查找指定字符串的位置
6public boolean startsWith​(String prefix)普通判断是否以指定的字符串开头
7public boolean startsWith​(String prefix,int toffset)普通由指定位置判断是否以指定字符串开头
8public boolean endsWith​(String suffix)普通判断是否以指定的字符串结尾

替换

所谓的字符串替换指的是可以通过一个指定的内容进行指定字符串的替换显示,对于替换方法主要有两个

NO方法名称类型描述
1public String replaceAll​(String regex,String replacement)普通全部替换
2public String replaceFirst​(String regex,String replacement)普通替换首个

拆分

序号名称类型说明
1public String[] split(String regex)普通按照指定的字符串全部拆分
2public String[] split(String regex,int limit)普通按照指定的字符串拆分为指定个数

截取

序号名称类型说明
1public String subString(int beginIndex)普通由指定索引截取到结尾
2public String subString(int beginIndex,int endIndex)普通截取指定索引范围中的子字符串

格式化

Java提供了格式化数据的处理操作,类似于C语言之中的格式化输出语句,可以利用占位符实现数据的输出,对于占位符而言,常用的:字符串(%s)、字符(%c)、整数(%d)、小数(%f)等来描述。
format(String format,Object … args)

 // 字符串结构:"用户id-photo-姓名.后缀"
        String name = "张三." ;
        int age = 18 ;
        double score = 98.765321;
        String str = String.format("姓名:%s,年龄:%d,成绩:%5.2f。",name,age,score); // %5.2f小数保留两位,整数保留3位
        System.out.println(str);//%5.2f        5是总数,.是小数,2是小数位数

其他操作

no方法作用
1toUpperCase()全部大写
2toLowerCase()全部小写
3str.trim()去除两头空格后的信息,String
4str.length()字符串长度

对象池

1.对象池的主要目的是实现数据的共享处理。
2.但是在Java之中对象池(常量池)实际上可以分为两种
‒ 静态常量池:指的是程序(.class)在加载的时候会自动将此程序之中保存的字符串,普通的常量,类和方法的信息等等,全部进行分配
‒ 运行时常量池:当一个程序加载之后(
.class)加载之后,里面可能有一些变量
3.对象池就是在创建对象的时候,首先会对比数据池里有没有相同的,有的话就直接由连接池提供对象,提供使用完后又回收到连接池中。
4.若是用构造方法创建对象的话,就会开辟两块堆空间,其中一块会成为垃圾,不会自动入池,但是我们可以通过使用intern()方法手动入池。

参考文献

阿里云开发者社区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值