String和它的“小伙伴们”!,String、StringBuffe、StringBuilder三者区别?

2 篇文章 0 订阅
2 篇文章 0 订阅

String类

String对于大家来说都不陌生,相信大家能够完全熟练运用String类的相关定义。本文主要就String类中的方法以及定义做详细的介绍。

1、字符串定义的四种方式
String str = "hello";

String str1 = new String{"hello"};

char[] array = {'a','b','c','d'};
String str2 = new String(array);

String str3 = new String(array,1,2);

以上为字符串定义的四种方式,其中第四种代表偏移量,表示传入一个数组array1下标开始往后取2位。所以最终结果为bc。

2、实例计算值是否相等
String str = "hello";
String str1 = new String("hello");
System.out.println(str == str1);

上述代码,结果为false,因为新new对象就会在堆空间开辟空间,而str的值存储在堆空间中的常量池中地址,str1存储的是堆空间new的内存的地址,str和str1的地址值是不同的所以其结果为false。

如果需要str和str1的结果相同时就需要使用equals方法比较:(str.equals(str1));其结果为true

String str = "hello";
String str2 = "he" + new String("llo");
System.out.println(str == str2);

上述代码,结果为false,因为"he"是存储在常量池中,而"llo"是新new出来的对象存储在常量池中,它指向的是new的对象中value数组中的值,当"he""llo"发生拼接式就会在堆上产生新的对象,并返回新的地址给str2,所以str和str2指向不同的地址,所以该结果为false。

Strig str = "hello";
String str3 = "he"+"llo";
System.out.println(str == str3);

上述代码,该结果为true,因为在反汇编时,"he""llo",已经拼接成了"hello",常量池如果有相同的字符串,直接将结果返回出去,无论new 没new 对象,所以str和str3指向的是同一个地址,所以其结果是相同的。

3、inter()方法
String str = "hello";
String str1 = new String("hello").inter();
System.out.println(str == str1);

上述代码,结果为true,因为它调用了inter方法,str值为"hello",新new 的对象值也为"hello",当str1调用inter方法时,返回的时hello,同时常量池中已经存在了"hello",所以不进入,并且直接返回hello,所以其结果为true。

inter用法:如果常量池中有相同对象,他将对象直接返回
4、charAt()方法

charAt()方法:获取指定索引位置的字符

String str = "hello";
char mychar = str.charAt(1);

上述代码,输出结果为e,因为Strng存储是以value[]数组进行存储的,所以1下标指向的是e。

5、toCharArray()方法

toCharArray()方法:将字符串转换为字符数组。

String str = "hello";
char[] array = str.toCharArray();
System.out.println(array);

输出结果:hello
实例

1、给定字符串一个字符串, 判断其是否全部由数字所组成

String str = "12345"
for(int i = 0 i <str.length;i++){
	char ch = str.charAt(i);
	if(ch <'0' || ch >'9'){
		System.out.prntln("不都是数字字符")
		return;
	}
}

结果为:不打印任何数字

2、字节与字符串

byte[] arr = {97,98,99,100};
String  strr = new String(arr);

打印结果为:abcd

6、字符串比较

equals()方法和equaisIgnoreCase()方法

String str = "abc";
String str2 = "ABC";
System.out.println(str.equals(str2));//false
System.out.println(str.equalsIgnoreCase(str2));//true
System.out.println(str.compareTo(str2));

equals()方法,进行比较两字符串是否相同,返回boolean类型
equalsIgnoreCase()方法,忽略大小写进行比较
compareTo()方法,比较大小,返回有三种情况str>str2,str<str2,str=str2;
7、 String、StringBuffer、StringBuilder
String、StringBuffer、StringBuilder三者区别:
  1. String的拼接会产生新的对象,但是StringBuffer和StringBuilder
    是用append方法进行拼接,返回的是当前对象。

  2. String的拼接被优化为 StringBuilder

  3. StringBuffer用来保证线程安全,多用多线程,关键字:synchronized

  4. StringBuilder 用于单线程

  5. String用于单线程(不可写在循环里 会产生大量临时变量)

  6. String方法没有StringBuilder和StringBuffer的方法多

String、StringBuffer、StringBuilder转换

String转换为StringBuilder

  String str = "abc";`

  StringBuffer sb = new StringBuilder (str)`

  System.out.println(sb);`


  StringBuilder sb1 = new StringBuilder();`

  sb.append(str);`

  System.out.println(sb1)`
String转换为StringBuilder 与转为StringBuffer相同

StringBuilder转String

StringBuilder  sb = new StringBuilder("abc");`

String str = sb.toString();`

System.out.println(str);`
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值