JAVA基础学习 String

目录

 1相等性规则

2String类型

2.1常用方法

3 字符串常量池

  3.1 字符串常量池的设计思想

3.2 常量池工作原理

3.3 实现的基础

4 StringBuffer与StringBuilder 

5 String和Stringbuffer的转换


 1相等性规则

1==比较基本数据类型,判断的是值是否相等(基本数据类型只能用==比较)

2==比较引用类型,判断的是内存地址是否相等

equals方法 Object类继承下来的

1默认的equals方法与==一样,比较的是内存地址

2按照自己的相等性规则进行比较,需要自定义equals方法(String类的equals方法比较的是值)


2String类型

Srting类型是一个引用类型,即栈中存放对象名和对象的引用,堆中存放String对象

String类型的对象,底层实际是一个final修饰的char类型的数组

String类也加final关键字修饰

2.1常用方法

方法返回值作用示例
equals();boolean

 判断字符串是否相等,区分大小写

String a = "hi";

String b = "hello";

boolean tar = a.equals(b);

length()int

返回字符串的长度

int len = a.length();
trim()String去除字符串两端的空格String b = a.trim();
replace()String

将字符串中的 oldChar 替换为 newChar

把能匹配的全部替换

replace(char oldChar, char newChar):
concat()String拼接字符串a.concat("123")

toLowerCase(): 

String将字符串转换为小写a.toLowerCase
toUpperCase():String

将字符串转换为大写

a.toUpperCase
split()String[] 将字符串按照 regex 分割为字符串数组split(String regex)
containsboolean判断字符串是否包含指定字符串a.contains("a")
substring()String

 返回从 beginIndex 到 endIndex-1 的子字符串

substring(int beginIndex, int endIndex):

indexOf()

int

返回字符串中第一次出现 str 的位置,若无则返回 -1

indexOf(String str);

lastindexOf()int

 返回字符串中最后一次出现 str 的位置,若无则返回 -1

lastIndexOf(String str);

charAt()char获取字符串中指定下标的字符char c = a.charAt(2);
isEmptyboolean

判断字符串是否为空,等同于 length() == 0

isEmpty()
toCharArray()char[]将字符串转成字符数组char[] d = a.toCharArray();
String.valueOf()String将变量转化为String类型

int a=1;

String b  = null;

b = String.valueOf(a);


3 字符串常量池

  3.1 字符串常量池的设计思想

字符串的分配·,和其他对象分配一样,耗费高昂的时间与空间代价,作为最基础的数据类型,大量频繁的创建字符串,极大程度地影响程序的性能。

3.2 常量池工作原理

JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化

为字符串开辟一个字符串常量池,类似于缓存区

创建字符串常量时,首先检查字符传常量池是否存在该字符串

存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中


		String l="abc";
		//在字符串常量池中 放上abc 把地址给l
		String m = "abc";
		//看看常量池里面有没有abc,有把原来的abc的地址返回给m
		
		System.out.println(l==m);

 结果为true

3.3 实现的基础

 实现该优化的基础是因为字符串是不可变的(final+private),可以不用担心数据冲突进行共享运行时实例创建的全局字符串常量池中有一个表,总是以池中每个唯一的字符串对象维护一个引用,这就意味着它们一直引用着常量池中的对象,所以,在常量池中的这些字符串不会被垃圾收集器回收。


4 StringBuffer与StringBuilder 

String和StringBuffer  StringBuilder他们都可以储存和操作字符串,即包含多种字符串的字符串数据。String类是字符串常量,是不可改变的常量。而StringBuffer/StringBuilder是字符串变量,他的对象是可以扩充和修改的。


		StringBuilder d = new StringBuilder();
		
		d.append("a");
		d.append("b");
		d.append("c");
		System.out.println(d);

输出结果为abc。

特点

1 修改String对象的值,内存地址会发生改变

2StringBuffer和StringBuilder类的对象能够被多次修改,并且不产生新的对象,即内存地址不变

3StringBuffer是线程安全的  StringBuilder是xaioxaio线程不安全的

4StringBuilder的执行速度比StringBuffer快

方法返回值作用示例
append()StringBuffer拼接字符串到末尾

StringBuffer a;

a.append("abc");

revewrse()StringBuffer将字符串中的字符顺序反转
delete()StringBuffer删除字符串中指定下标范围的字符串a.delete(1,2);
insert()在字符串指定下标位置插入字符串a.insert(1,"abc");
replace()替换指定索引区间内的字符串a.replace(1,3,"abc");
length()int字符串长度a.length();
toString()转成String字符串a.toString();

intern()方法

因为不是所有的字符串创建方式都会在常量池中生成对应的字符串,而intern方法用于根据所给的字符串在常量池中创建对应的字符串。jdk1.7以后,调用intern方法时,如果该字符串已经存在于常量池中,则将常量池中的引用直接返回;如果不存在,则在常量池中生成一个对原字符串的引用。

5 String和Stringbuffer的转换

String类有一些Stringbuffer类没有的方法,比如:ValueOf(),getBytes()等,可以将StringBuffer转换成String,就可以使用String的功能。反之依然。

String>>>StringBuffer

1,通过构造方法StringBuffer s=new StringBuffer(String s)

2,通过append()方法 String str=new String(buffer)

StringBuffer>>>String

1,通过构造方法String str= new String(StringBuffer buffer)

2,通过toString方法

  public static void main(String[] args) {
    //String>>>StringBuffer
        String s="hello";
        //方法一:通过构造方法
        StringBuffer sb1=new StringBuffer(s);
        //方法二 通过append()方法
        StringBuffer sb2=new StringBuffer();
        sb2.append(s);
        System.out.println(sb1);
        System.out.println(sb2);

        //StringBuffer>>>String
        StringBuffer sb3=new StringBuffer("你好");
        //方法一 通过构造方法
        String s2=new String(sb3);
        //方法二 通过toString方法
        String s3= sb3.toString();
        System.out.println(s2);
        System.out.println(s3);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值