String类

Java中,字符串被作为String类型的对象来处理。String类位于java.lang包中,默认情况下该包被自动导入所有的程序。

1、创建String类型的对象:

public class zhang {

	public static void main(String[] args) {
		// 创建方式 直接赋值: 把字符串常量放在String池中, 自动入池
		String str = "abc"; // 推荐

		// new 方式: 创建两个对象, 不会自动入池, 有一个是垃圾
		String str2 = new String("abc");

		String str3 = "abc";

	}
}

public class StringTest {
	public static void main(String args[]) {
		// 在池中和堆中分别创建String对象"abc",s1指向堆中对象
		String s1 = new String("abc");
		// s2直接指向池中对象"abc"
		String s2 = "abc";
		// 在堆中为"abc"创建新对象,s3指向该对象
		String s3 = new String("abc");
		// 在池中创建对象"ab" 和 "c",并且s4指向池中对象"abc"
		String s4 = "ab" + "c";
		// c指向池中对象"c"
		String c = "c";
		// 在堆中创建新的对象"abc",并且s5指向该对象
		String s5 = "ab" + c;
		System.out.println("------------实串-----------");
		System.out.println(s1 == s2); // false
		System.out.println(s1 == s3); // false
		System.out.println(s2 == s3); // false
		System.out.println(s2 == s4); // true
		System.out.println(s2 == s5); // false
	}
}

字符串的两种实例化方式及其差别

​ 1).String str = “abc”;

​ 2).String str = new String(“abc”);

​ Java运行时会维护一个String Pool(String池), 也叫“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。

​ 当用户采用直接赋值实例化String对象的时候,如果是第一次定义,则会自动的将对象的内容(字符串内容)保存在字符串对象池之中,以后如果其他的字符串对象依然采用直接赋值的话,可以直接通过对象池取出已经保存的内容继续使用,而不会再重新开辟新的空间

​ String对象的创建很讲究需要注意的点如下:

​ a.当使用任何方式来创建一个字符串对象s时,Java运行时(运行中JVM)会拿着这个s在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加

​ b.Java中,只要使用new关键字来创建对象,则一定会(在堆区)创建一个新的对象

​ c.使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。

​ d.使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。最后指向堆内存中的对象。

 

补充:String类型是不可变的字符串, 用来存放数据。如果对字符串需要进行修改, 推荐使用StringBuffer, 线程安全, 效率不高。StringBuilder 也是可变的字符串,线程不安全, 效率高。

 

2、String的方法

”==”表示判断该两个字符串是否为同一对象,即在内存中的地址是否一样。

equals()将字符串与指定的对象比较。注意此时比较的是内容是否相等(字符串类对此方法进行了覆写)。

String类常用方法
返回值方法说明
intlength()返回字符串的长度
booleanequals()判断两个字符串的值是否相等。
booleanequalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写。
常用提取和搜索字符串的方法
返回值方法说明
intindexOf(char ch)返回指定字符(串)在此字符串中第一次出现处的索引。如果未出现该字符(串),则返回 -1
intindexOf(String str)
intlastIndexOf(char ch, int fromIndex)返回指定字符(串)在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
intlastIndexOf(String str, int fromIndex)
charcharAt(int index)返回指定索引处的 char 值。
chartoCharArray()将此字符串转换为一个新的字符数组。
booleancontains(String s)当且仅当此字符串包含指定的字符串时,返回 true。
booleanstartsWith(String prefix)测试此字符串是否以指定的前缀开始。
booleanendsWith(String suffix)测试此字符串是否以指定的后缀结束。
Stringsubstring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。
Stringsubstring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串。
Stringconcat(String str)当且仅当此字符串包含指定的 char 值序列时,返回 true。
Stringreplace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
Stringtrim()返回字符串的副本,忽略前导空白和尾部空白。
StringvalueOf(Object obj)

返回 Object参数的字符串表示形式。

Object可以为Integer,double,float,char

StringtoLowerCase()都转换为小写字母
StringtoUpperCase()都转换为大写字母
String[ ]split(String regex)以regex为分隔符,拆分此字符串并返回
   
public class Test {
	public static void main(String[] args) {
		// 创建方式 直接赋值: 把字符串常量放在String池中, 自动入池
		String str = "abc"; // 推荐

		// new 方式: 创建两个对象, 不会自动入池, 有一个是垃圾
		String str2 = new String("abc");

		String str3 = "abc";

		String str4 = "Abc";

		// 字符串比较: == equals()
		// == 比较地址 equals比较的内容

		// equals() 区分大小写
		/*
		 * System.out.println(str.equals(str2)); //true
		 * System.out.println(str.equals(str3)); //true
		 * System.out.println(str.equals(str4)); //false
		 */
		// 不区分大小写的 equalsIgnoreCase(String anotherString)
		System.out.println(str.equalsIgnoreCase(str4)); // true

		// 比较是否是同一个对象
		/*
		 * System.out.println(str == str2);//false System.out.println(str ==
		 * str3);//true
		 */

		// 获取指定位置的字符char charAt(下标) 把String转换为char
		System.out.println(str.charAt(0));
		// toCharArray() 转换为char数组

		// 查找
		// 判断字符串是否包含其他字符/字符串 true/false contains(String s)
		// System.out.println(str+"是否包含ab:"+str.contains("ac"));

		// indexOf(String s) 查找指定字符串第一次出现的位置: 下标 找不到返回-1
		String str5 = "hello  world";
		System.out.println(str5 + "中l第一次出现的位置:" + str5.indexOf("c"));

		// indexOf(String s, int formIndex) 从formIndex开始往后查找
		// 查找第二个l的位置
		System.out.println(str5 + "中l第二次出现的位置:"
				+ str5.indexOf("l", str5.indexOf("l") + 1));

		// lastIndexOf(String s)查找指定字符串最后一次出现的位置: 找不到返回-1
		System.out.println(str5 + "中l最后一次出现的位置:" + str5.lastIndexOf("l"));

		// 判断字符串以什么开头 startsWith(String s)
		System.out.println(str5 + "是以a开头吗?" + str5.startsWith("a"));

		// 判断字符串以什么开头 endsWith(String s)
		System.out.println(str5 + "是以d结尾吗?" + str5.endsWith("d"));

		// 截取字符串:
		String str6 = "男21爱吃猫的鱼";
		// substring(int 开始位置) 从开始位置(包括)截取到字符串末尾
		System.out.println(str6.substring(1));

		// substring(int 开始位置, int 结束位置) 从开始位置(包括)截取到结束位置(不包括)
		System.out.println(str6.substring(1, 3));

		String str7 = "男,21,爱吃猫的鱼";
		// 拆分字符串:String[] split(String 分割符)
		String[] rs = str7.split(",");
		for (int i = 0; i < rs.length; i++) {
			System.out.println(rs[i]);
		}

		// 获取字符串的长度 length()
		System.out.println(str7 + "包含几个字符:" + str7.length());

		// 取消字符串的前后空格 trim()
		String str8 = "    哈   哈     ";
		System.out.println(str8);
		System.out.println(str8.trim());

		// 判断字符串的内容是否是空 "" null String str9 = ""; String str10 = null;
		// isEmply() 判断字符串的内容是否"" 有内容: false 没有内容: true
		// 字符串与null的判断: ==null =! null
		// System.out.println(str8.isEmpty());

		// 大小写转换
		// 变成大写: toUpperCase()

		// 变成小写 toLowerCase()
	}
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值