String(一个特殊的数据类型)

String(一个特殊的数据类型)

在我的眼里,我觉得String是一个特殊的数据类型,为什么特殊呢?因为最初我以为它和byte、boolean、char、short、int、float、long、double等八种基本数据类型一样,甚至最初还把它当成了八种基本数据类型之一。后来才发现是错的。那它为什么它不属于基本数据类型呢,这是因为基本数据类型不能创建对象,而String是可以创建对象的,String它是一个类,而基本数据类型不是,这就是这个数据类型的特别之处。

String创建对象

String创建对象有两种方法:

  1. 其一:String str3 = “abc”;,直接将字符串赋值给一个String对象

创建原理:其实对于一些初学者是不明白它的创建原理,这里的“abc”其实不是在堆中,而是在常量池中,当创建String对象时,如果是第一次创建“abc”这个对象,就会首先在常量池中分配空间,然后将“abc”存储进去,然后再将常量池中存储“abc”的地址引用直接赋给String对象,如果不是第一次创建“abc”这个对象,那么就会拿着“abc”在常量池中查找,然后将查找到的地址引用赋给新建的对象,所以用过用这一种方法创建String对象的话,无论创建多少个值为“abc”的对象,这些对象的引用都是同一个。
2. 其二:String str1 = new String(“abc”);,

创建原理:其实我们可以将这个代码分为三个部分,即 “String str1“、“=“、“new String(“abc”)", "String str1"这第一部分其实只是创建了一个String对象,但并未赋值,也就是说,它没有去创建值为“abc”的对象,第二部分“=”是一个赋值表达式,明显没有创建对象,第三部分“new String(“abc”)"其实创建了两个"abc"字符串对象,首先会拿着“abc”在常量池查找有没有,没有便新开辟一个空间然后将“abc”存储其中,然后我们在看new这个关键词,通过new创建的对象都会在堆中,所以这里的第二个“abc”字符串对象就是在堆中。

String中的常用方法

1.concat(str1):该方法是在调拥对象的字符串末尾追加目标字符串(str1),并返回一个新的字符串。

2.substring(beginIndext):该方法是从开始下标处截取
到字符串末尾,并返回一个新的字符串。
3. substring(beginIndex,endIndex):该方法是从开始下标处(包含)截取到结束下标处(不包含),并返回一个新的字符串
4. toLowerCase():转小写,并返回一个新的字符串
5. toUpperCase():转大写,并返回一个新的字符串
6. trim():去掉首尾空格,并返回一个新的字符串
7. replac(targetChar,newchar):使用newchar替换targetchar;特殊用法:replace(" “,”");可去掉字符串中的所有空格,囊括了trim()方法的去首尾空格,包括了去掉字符串中间的空格。
8. length():获取字符串的长度,index+1;
9. equals():比较两字符串是否相等(区分大小写)
10. equalsIgnoreCase():比较两字符串的是否相等(不区分大小写);
11. startsWith(str1):判断字符串是不是以str1开头;
12. endWith(str2):判断字符串是不是以str2结尾;
13. indexOf(char1):查找字符串第一次出现的下标(char1可以使用字符对应的ASCII码)如果括号里是一个字符串,则是查找一个字符串第一次出现的下标
14. lastIndexOf(char2):查找字符串最后一次出现的下标(char1可以使用字符对应的ASCII码)如果括号里是一个字符串,则是查找一个字符串最后一次出现的下标
15. charAt(index):获取指定下标上的字符
16. valueOf(type):把type类型的数据转换成字符串。
17. copyValueOf(charArray):把字符数组转换成字符串;
18. copyValueOf(charArray,beginIndex,count):把从开始下标的count个字符数组元素转化成字符串。

使用情况

public class Test {

	public static void main(String[] args) {
		/**
		 * 使用String类常用的方法:
		 */
		String str ="0123467dadfgbcHUINIUDEF";
		str = str.concat("123");
		System.out.println(str);
		str = str.substring(2);
		str = str.substring(1, 8);
		str = str.toLowerCase();
		str = str.toUpperCase();
		
		str = "  134342  3abc 1234567       ";

		str = str.trim();
		
		str = str.replace('3', 'Z');
		str = str.replace(" ", "");
		
		int len = str.length();
		System.out.println( len);
		
		System.out.println(str);
		
		System.out.println(str.equals("12oabcDEBJBJIBIJF12o"));
		System.out.println( + str.equalsIgnoreCase("12oABbdsaibfdCDEF12o"));
		
		System.out.println(str.startsWith("12"));
		System.out.println(str.endsWith("F12o"));
		
		System.out.println(str.indexOf('o'));
		System.out.println(str.indexOf("2"));
		System.out.println(str.lastIndexOf(49));
		System.out.println(str.lastIndexOf("12"));
		
		System.out.println( str.charAt(6));
		
		System.out.println(String.valueOf(true));
		System.out.println(String.valueOf(100));
		System.out.println( String.valueOf(123.12));
		System.out.println(String.valueOf('A'));
		
		char[] cs = {'1','2','A','B','C','d'};
		String copyValueOf1 = String.copyValueOf(cs);
		System.out.println(copyValueOf1);
		String copyValueOf2 = String.copyValueOf(cs, 2, 3);
		System.out.println(copyValueOf2);
	}
}

提示

以上只是我自己的看法,如有相同纯属意外。如有错误,也请谅解,勿喷!如有收获或疑问,欢迎点赞评论。

  • 25
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值