Java(1)String和StringBuilder

String构造方法:
public String():创建一个空白字符串对象,不含任何内容
public String(char[] chs):根据字符数组的内容,来创建字符串对象
public String(byte[] bys):根据字节组内容,来创建字符串对象
(通过以上三种方式:使用new创建字符串对象,每次都会申请一个内存空间,虽然内容相同,但是地址不同)

String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abc
(以“”方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序中出现几次,JVM都只会创建一个String对象,并在常量池中维护)
虽然介绍了四种String对象的构造方法,但是推荐使用最后一种,其他的只做了解。


public class Stringbuild {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//	public String():创建一个空白字符串对象,不含任何内容
		String s1=new String();
		System.out.println("s1:"+s1);
		
		//public String(char[] chs):根据字符数组的内容,来创建字符串对象
		char[] chs= {'a','b','c'};
		String s2=new String(chs);
		System.out.println("s2:"+s2);
		
		//public String(byte[] bys):根据字节组内容,来创建字符串对象
	 	byte[] bys= {97, 98, 99};	//byte类型取值范围是-128~127
	 	String s3 =new String(bys);
	 	System.out.println("s3:"+s3);
	 	
	 	// 	String s = "abc"; 直接赋值的方式创建字符串对象,内容就是abc
	 	String s4="abc";
	 	System.out.println("s4:"+s4); //推荐使用这个方法
	}

}

上述代码请试着自己敲一遍,第三个输出的结果是什么呢?

使用“==”作比较:
基本类型:比较的是数据值是否相同
引用类型:比较的是地址值是否相同
字符串是对象,他比较内容是否相同,是通过一个方法来实现的,这个方法叫:equals();
public boolean equals(Object anObject):将此字符串与指定对象进行比较。由于我们比较的的是字符串对象
所以参数直接传递一个字符串。


public class StringCompare {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char[] chs= {'a','b','c'};
		String s1=new String(chs);
		String s2=new String(chs);
		//比较字符串地址是否相同
		System.out.println(s1==s2);//之前有说字符串的效果上相当于char[],所以名字即是地址
		//比较字符串的内容是否相同
		System.out.println(s1.equals(s2));
		
		String s3="abc";
		String s4="abc";
		System.out.println(s3==s4);
		System.out.println(s3.equals(s4));
	}

}

结果:
false
true
true
true
使用new创建字符串对象,每次都会申请一个内存空间,虽然内容相同,但是地址不同
以""方式给出的字符串,只要字符串序列相同(顺序和大小写),无论在程序中出现几次,JVM都只会创建一个String对象,
并在字符串池中维护

StringBuilder
上面说到String类创建对象时候会在常量池(堆内存)中存放
如下:

String s1="hello";
String s+="world";
System.out.println(s);

这样创建对象的时候会在常量池中建立三个String对象,但是我们只使用"hello world"这一个对象,如此便造成了空间的浪费。

为了避免这种浪费,java提供了StringBuilder类:
StringBuilder是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变是指StringBuilder对象中的内容是可变的。

String和StringBuilder的区别
String的内容是不可变的,StringBuilder的内容是可变的。

StringBuilder构造方法:
public StringBuilder():构造一个空白可变字符串对象,不含任何内容
public StringBuilder(String str):根据字符串的内容,来创建可变字符串对象


public class StringBuildDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
StringBuilder str1=new StringBuilder();
System.out.println("str1:"+str1);
System.out.println(str1.length());

StringBuilder str2=new StringBuilder("hello");
System.out.println("str2:"+str2);
System.out.println(str2.length());
	}

}

StringBuilder的添加和反转方法:
public StringBuilder append(任意类型),添加数据,并返回本身
public StringBuilder reverse():返回相反的字符序列

这里有一段有趣的code

//链式编程
s.append("hello").append("world").append("!");

String和StringBuilder的相互转化
为什么要转化呢?
上面提到StringBuilder中的append和reverse函数,这两个函数在String类里面是没办法使用的,所以我们要把String类转化成StringBuilder类后使用这两个函数,然后再转化回去。

1、StringBuilder转换为String
public String toString():通过toString()函数就可以实现把StringBuilder转换为String
2、String转换为StringBuilder
public StringBuilder(String s):通过构造方法可以实现把String转换为StringBuilder

StringBuilder s=new StringBuilder();
s.append("hello");

String s2=s.toString();
StringBuilder s3=new StringBuilder(s2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值