两种创建字符串方法的比较------面试题

public class StringText {

	public static void main(String[] args) {


		/**
		 * new一个对象时,在堆中开辟出新的地址,在数据,
		 * 共享区查找需要创建对象的内容,如果有直接将堆中new
		 * 的地址指向数据共享区的数据,如果没有先在数据共享区
		 * 创建该数据,将堆中的地址指向创建数据的地址;
		 * 用“==”比较的时候内容都是不相等的
		 * 而创建一个对象时,直接定义,是在数据共享区创建的
		 * 对象,再定义一个对象时,首先在数据共享区查找和该
		 * 对象的内容是否相同,相同的话,那么把该对象的内容
		 * 地址,给新的对象,这样两个对象指向的就是同一个内
		 * 存空间,如果没有该内容,才会在数据共享区创建一个
		 * 新的地址,存放该对象的内容;
		 * 这就是“new”和不new的本质区别
		 */
		String str1="abc";
		String str2="abc";
		str1="cde";
		System.out.println(str1);
		String str3=new String("abc");
		String str4=new String("abc");
		System.out.println(str1==str2);
		System.out.println(str3==str4);
		System.out.println(str1==str3);
		System.out.println(str1.equals(str2));
		System.out.println(str3.equals(str1));
		
		System.out.println("-------------");
		//、关于字符串常量的验证
		String a1="Hello";
		String a2="World";
		String a3="HelloWorld";
		
		/*、字符串是常量,相加的结果是,即使数据共享区有该相加的结果,仍旧
		 * 会得到一个新的结果,而这两个结果的地址是不相同的*/
		System.out.println(a3==a1+a2);
		
		/*、两个字符串做拼接操作,首先会在数据共享区找相同的结果,如果有那么
		 * 拼接的地址就是该结果,如果没有会在数据共享区创建该内容*/
		System.out.println(a3==("Hello"+"World"));
		String s=new String("abcdefg");
		String s2=new String("abcdefg");
		
		//charAt(int index),返回指定索引处的 char值
		char c1=s.charAt(2);
		System.out.println(c1);
		
		//codePointAt(int index),返回指定索引处的字符(Unicode 代码点
		
		char c2=(char) s.codePointAt(0);
		System.out.println(c2);
		
		//codePointBefore(int index),返回指定索引之前的字符(Unicode 代码点)。
		
		char c3=(char)s.codePointBefore(2);
		System.out.println(c3);
		
		//codePointCount(int beginIndex, int endIndex),返回此 String 的指定文本范围中的 Unicode 代码点数。
		int c4=s.codePointCount(2,4);
		System.out.println(c4);
		
		/*compareTo(String anotherString),按字典顺序比较两个字符串
		 * 比较规则是每个字母的字典序,字典序大的比较大,与长度没有关系
		 */
		boolean flag=s.compareTo(s2)>0;
		System.out.println(flag);
		
		/*compareToIgnoreCase(String str) 
                                按字典顺序比较两个字符串,不考虑大小写*/
		boolean flag2=s.compareToIgnoreCase(s2)==0;
		System.out.println(flag2);
		
		/*concat(String str) 
          	将指定字符串连接到此字符串的结尾*/
		String s3=s.concat(s2);
		System.out.println(s3);
		
		/*contains(CharSequence s) 
                                    当且仅当此字符串包含指定的 char 值序列时,返回 true*/
		
		boolean flag3=s3.contains(s);
		System.out.println(flag3);
		
		/*contentEquals(CharSequence cs) 
          `将此字符串与指定的 CharSequence 比较*/
		boolean flag4=s.contentEquals(s2);
		System.out.println(flag4);
		
		
		char[] arr=new char[] {'c','k'};
		/*copyValueOf(char[] data) 
          	返回指定数组中表示该字符序列的 String*/
		String s4=s.copyValueOf(arr);
		
		/*endsWith()测试是否以指定字符串结束*/
		boolean flag5=s.endsWith("l");
		System.out.println(flag5);
		
		/*equals()比较两个字符*/
		boolean flag6=s.equals(s2);
		System.out.println(flag6);
		System.out.println("----------------");
	}
}
发布了36 篇原创文章 · 获赞 50 · 访问量 9767

猜你喜欢

转载自blog.csdn.net/qq_41765969/article/details/89460075