JAVA学习日记: String-StringBuffer-StringBuilder(1)

今天学习了的主要内容:

1.字符串的字面量
2.常量池、堆内存
3.String常用方法

字符串的字面量:

声明字符串变量中包含在“  ”内的内容就是字符串的字面量。
new出来的String对象同时分配了堆内存和栈内存。

常量池、堆内存:

java提供了一个维护所有字符串字面量的空间,目的是获得更好的性能,
这个空间就叫池。所有编译时的常量字符串的字面量都会被放到这个
String池里。

String常用方法:

endWith(String suffix)判断字符串是否以str字符串结尾
startWith(String prefix)判断字符串是否以str字符串开头
contains(CharSequence str)判断字符串是否包含str字符串
charAt(int index)得到index位置的字符
indexOf(String str)得到str这个字符串第一次在调用该方法的字符串中的位置
lastIndexOf(String str)str这个字符串最后一次在调用该方法的字符串中的位置
replace(char oldChar, char newChar)替换字符
replace(CharSequence target, CharSequence replacement)替换字符串
split(String regex)以regex为分隔符,把字符串分解为字符数组

StringTestDemo01类(测试类):

package LessonForString;

public class StringTestDemo01 
{
    
    
	public static void main(String[] args) 
	{
    
    
		//这仨会去常量池里找hello world没有的话就在常量池里造一个
		String _s1 = "hello world";
		String _s2 = "hello world";
		String _s3 = "hello java";
		
		//这俩用new的会在堆里分配空间,但他会去常量池里找有没有hello java,如果没有就在常量池里弄一个然后引用过来。根是在堆里面
		String _s4 = new String("hello java");//第十四行代码同时创建了两个对象,一个在堆里一个在常量池里
		String _s5 = new String("hello java");//此时常量池里有hello java了所以此时就只在堆中创建了一个对象。
		
		boolean _b1 = _s1 == _s2;// == 号在比较基本数据类型时比较的是值
		boolean _b2 = _s4 == _s5;// == 号在比较引用对象时比较的是地址
		
		boolean _b3 = _s3 == _s4;
		
		System.out.println("_s1 == _s2:"+_b1);
		System.out.println("_s4 == _s5:"+_b2);
		System.out.println("_s4 equals _s5:"+(_s4.equals(_s5)));//此时equals方法被String类重写了,比较的是两个字符串在常量池中引用的值是否相等。
		
		System.out.println("_s3 == _s4:"+_b3);
		System.out.println("_s3 equals _s4:"+(_s3.equals(_s4)));//此时equals方法被String类重写了,比较的是两个字符串在常量池中引用的值是否相等。
		System.out.println("_s4 equals _s3:"+(_s4.equals(_s3)));//此时equals方法被String类重写了,比较的是两个字符串在常量池中引用的值是否相等。
		
		System.out.println("-------------------------------------------");
		//以下两个字符串是否相等?
		String _s6 = "ZLM";
		String _s7 = "Z"+"LM";//会先拼接再去常量池里面寻找,编译时就确定
		
		boolean _b4 = _s6 == _s7;
		System.out.println("以下两个字符串是否相等_s6 == _s7: "+_b4);

		System.out.println("-------------------------------------------");
		
		final String _s8 = "Z";//常量
		String _s9 = "Z";//变量
		
		String _s10 = _s8 + "LM";//字面量与常量拼接,在编译时期就被加入到常量池了。由常量表达式计算出的字符串是在编译时进行计算,然后被当作常量放入池中了。
		String _s11 = _s9 + "LM";//字面量与变量拼接,需要进行一些转换,实际引用了堆里的对象此时_s11指向堆里的。
		
		System.out.println("_s10是与常量拼接:"+(_s10 == "ZLM"));
		System.out.println("_s11是与变量拼接:"+(_s11 == "ZLM"));
		System.out.println("_s11运用intern()方法之后:"+(_s11.intern() == "ZLM"));     
		//此时判断_s11是否在常量池中,在的话将ZLM的引用赋值给_s11;
		/*
		 * 	intern()方法:
		 * 		这个方法能够将String对象加入到String池中去。
		 * 		这个方法运行过程是:
		 * 			首先到String池中去找这个值,
		 * 			如果池中存在该值,返回String池中的这个值的引用。
		 * 			如果池中没有这个值,创建一个新的String对象,加入池中。
		 */
		
		System.out.println("---------------------	String常用方法	  ---------------------");
		
		String _s12 = "ZLM-QWER-ASDF-ZXSS-ZXCV";
		
		System.out.println("以-为分隔符,把_s12字符串分解为字符数组。");
		String[] result = _s12.split("-");//以-为分隔符,把_s12字符串分解为字符数组。
		for (String s:result)
		{
    
    
			System.out.println(s);
		}
		
		System.out.println("_s12是否以CV结尾:"+_s12.endsWith("CV"));
		System.out.println("_s12是否以ZLM-开头:"+_s12.startsWith("ZLM-"));
		System.out.println("_s12中是否包含QWE字符串:"+_s12.contains("QWE"));
		System.out.println("_s12中第4位的字符是:"+_s12.charAt(4));
		System.out.println("ASDF-这个字符串第一次在_s12字符串中的位置:"+_s12.indexOf("ASDF-"));
		System.out.println("-这个字符串最后一次在_s12字符串中的位置:"+_s12.lastIndexOf("-"));
		System.out.println("将_s12中的S字符替换成V字符后的结果:"+_s12.replace('S', 'V'));
		System.out.println("将_s12中的ZLM字符串替换成zlm字符串后的结果:"+_s12.replace("ZLM", "zlm"));
		System.out.println("将_s12中的第13个位置之后的字符串截取出来为:"+_s12.substring(13));
		System.out.println("将_s12中的从头到13个位置之间的字符串截取出来为:"+_s12.substring(0,13));
		
		String _s13 = "   ASD   ";
		System.out.println("_s13的原长为:"+_s13.length());
		System.out.println("去掉_s13头尾空格之后的结果:"+_s13.trim()+" 此时_s13的长度:"+_s13.length());
		
		System.out.println("将_s14转换为字符数组:");
		String _s14 = "string";
		char[] ch1 = _s14.toCharArray();
		for (char a:ch1)
		{
    
    
			System.out.println(a);
		}
		
		String _s15 = new String(ch1);
		System.out.println("ch1字符数组转换成字符串的结果为:"+_s15);
	}
}

本篇部分文字来源于:
	咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》
	在这里十分感谢老师能够给我带来学习的激情。

2020.10.26
可以转载我的学习日记但请注明出处,谢谢。
本文章是本人学习笔记,不进行任何商用!也请别拿去商用!只为记录本人学习历程。
毕	

猜你喜欢

转载自blog.csdn.net/SIESTA030/article/details/109295827
今日推荐