Java的常用类之String类

String就是C#、C++、java等编程语言中的字符串,所谓字符串,就是一连串的字符;用双引号引起来的几个字符,如"Abc",“星期”。
特别注意:
String类是不可变(final)的,对String类的任何改变,都是返回一个新的String类对象。这样的话把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似.
String str1 = “abc”;
String str2 = new String(“abc”);
两者的区别:s1在内存中有一个对象。s2在内存中有两个对象。
常量池:JVM 中一块独立的区域存放字符串常量和基本类型常量(public static final)。
String 使用 private final char value[]来实现字符串的存储,也就是说 String 对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,才说 String 类型是不可变的。
String 对象比较:
单独使用"“引号创建的字符串都是常量,编译期就已经确定存储到常量池中;
使用 new String(”")创建的对象会存储到堆内存中,是运行期新创建的;
使用只包含常量的字符串连接符如"aa" + “bb"创建的也是常量。编译期就能确定,已经确定存储到常量池中;
使用包含变量的字符串连接符如"aa” + s1 创建的对象是运行期才创建的,存储在堆中;
String类适用于描述字符串事物。提供了多个方法对字符串进行操作。
1:常用的获取方法。
在这里插入图片描述
2:常用的判断方法。
在这里插入图片描述
3:常用的转换方法。
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
在这里插入图片描述
4、其他的常用方法:
在这里插入图片描述
练习1:判断字符串是否由1到9的数字组成。示例代码如下:

public class StringDemo {
	public static void main(String[] args) {
		String s1 = "123456789";
		String s2 = "12345 6789";
		System.out.println(isnum(s1));
		System.out.println(isnum(s2));
	}

	public static boolean isnum(String s) {
		char[] ch = s.toCharArray();
		for (char c : ch) {
			if (!(c > '0' && c <= '9')) {
				return false;
			}
		}
		return true;
	}
}

结果截图:
在这里插入图片描述
StringBuffer 字符串缓冲区。是一个容器。
特点:1:长度是可变化的。2:可以字节操作多个数据类型。3:最终会通过toString方法变成字符串。
在这里插入图片描述
练习2:举例说明这两个类的运行效率。(不用每次新建对象,效率高!)示例代码如下:

public class StringDemo {
	public static void main(String[] args) {
		String s = "";
		long begintime = System.currentTimeMillis();
		for (int i = 1; i <= 100000; i++) {
			s += i;
		}
		long endtime = System.currentTimeMillis();
		long time = endtime - begintime;
		System.out.println("运行时间为:" + time);
		
		StringBuffer s1 = new StringBuffer();
		s = "";
		begintime = System.currentTimeMillis();
		for (int i = 1; i <= 100000; i++) {
			s = "" + i;
			s1 = new StringBuffer(s);
		}
		endtime = System.currentTimeMillis();
		time = endtime - begintime;
		System.out.println("运行时间为:" + time);
	}
}

结果截图如下:
在这里插入图片描述
总结:String、StringBuffer和StringBuilder(JDK1.5 版本之后出现了):
String 类对象不可变,一旦修改 String的值就是隐形的重建了一个新的对象,释放了原 String对象。
StringBuffer和StringBuilder类是可以通过append()、insert()、reverse()…等方法来修改值。创建的对象是可变。
StringBuffer:线程安全的; StringBuilder:线程非安全的。
字符串连接 String 的 + 比 StringBuffer(StringBuilder) 的 Append() 性能差了很多。
三者在执行速度方面的比较:StringBuilder > StringBuffer > String。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值