Java.常用类.String
发布日期:2021-05-07 02:46:25 浏览次数:19 分类:技术文章

本文共 5354 字,大约阅读时间需要 17 分钟。

常用类.String

一、基本知识

java.lang.String;是字符串类型的

1.字符串一旦创建不可再改变。“abc”字符串对象一旦创建,不可再改成“abcd”。

2.提升字符串的访问效率:

在程序中使用了“缓存”技术。即用""括起来的字符串都会在"字符串常量池"中创建一份 。字符串常量池在方法区内存被存储。

3.在程序执行过程中,如果程序用到某个字符串,例如"abc"。name程序会在常量池中去搜索该字符串 ,如果未找到就在字符串常量池中新建一个abc字符串,有的话就直接拿来用。

(字符串常量池是一个缓存区,为了提高访问字符串的效率)**

public class StringTesrt01 {   	/**	 * @param args	 */	public static void main(String[] args) {   		// TODO Auto-generated method stub		//s1是一个引用,指向的是“abc”		String s1 = "abc";		//s1只是局部变量,在未有final修饰时,可以指向新的字符串		//但是"abc""def"两个字符串一经创建后就会进入缓存区,不可更改		s1 = "def";				String s2 = "hello"; //在字符串常量池中新建		String s3 = "hello"; //直接从常量池中那来用,内存地址一样		System.out.println(s2==s3); //这里比较的仅是内存地址 true		System.out.println(s2.equals(s3));  //true		//== 两边如果是引用类型,则比较内存地址,地址相同为true,不同为false        // 所以    Object中的equals方法  比较的是两者的内存地址        // Object中的equals方法设计目的:比较两个对象是否一致 				String s4 = new String("abc");		String s5 = new String("abc");		System.out.println(s4==s5); //创建了两个不同的对象,内存地址不一样 false		System.out.println(s4.equals(s5)); //true Object类中的equals比较的是内存地址,本该是false		//但是String类中重写了equals方法,比较的是内容。				//以下程序会建立3个字符串对象		String s6 = "aaa";		String s7 = "bbb";		String s8 = s6+s7;		}}truetruefalsetrue

4.对于两种方式的比较:

String s1 = “abc”; //只会在字符串常量池中创建新的"abc"对象String s2 =  new String("abc"); //若字符串常量池中未存在,将会新建对象,并且关键的是还会在堆内存的对象内再次创建一个对象

在这里插入图片描述

通常第二种方式比较浪费内存。

例如:

String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("world");

该方法创建了一共有5个新的对象:

堆内存 — 3个 (hello、hello、world)
字符串常量池 — 2个 (hello、world)

5.使用String时,我们应当尽量不要做字符串的拼接操作。因为字符串一旦创建不可更改,如果频繁的拼接,会导致字符串常量池中连续地创建新的字符串对象,一来浪费空间,二来会给垃圾回收器带来问题。

二、String常用方法

String类常用的构造方法

public class StringTest02 {   	/**	 * @param args	 */	public static void main(String[] args) {   		// TODO Auto-generated method stub		//1.		String s1 = "abc";				//2.		String s2 = new String("abc");				//3.		byte[] bytes = {   97,98,99,100};		String s3 = new String(bytes);		System.out.println(s3); //从结果可以看出String重写了Object的toString方法				//4.		String s4 = new String(bytes,1,2);		System.out.println(s4);				//5.		char[] c1 = {   '我','是','中','国','人','武','汉','加','油'};		String s5 = new String(c1);		System.out.println(s5);				//6.		String s6 = new String(c1,5,4);		System.out.println(s6);	}}abcdbc我是中国人武汉加油武汉加油

以下是jdk帮助文档中的一些相关内容:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

字符串常用方法

public class StringTest03 {   	/**	 * @param args	 */	public static void main(String[] args) {   		// TODO Auto-generated method stub		//1.char charAt(int index);		//返回指定所引出的一个char值		char c1 = "asfdaf".charAt(4);		System.out.println(c1); //c				String s1 = "我是猪";		char c2 = s1.charAt(2);		System.out.println(c2); //猪				//2.boolean endsWith(String endStr);		System.out.println("helloWorld.java".endsWith(".java")); //true		    //3.boolean equalsIgnoreCase(String anotherString);		//比较字符串是否相等,并且忽略大小写		System.out.println("abc".equalsIgnoreCase("ABC")); //true				//4.byte[] getBytes() 		//使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中。  		byte[] bytes = "abc".getBytes();		for(int i = 0; i < bytes.length; i++){   			System.out.println(bytes[i]);  // 97 98 99		}				//5.int indexOf(int ch) 		//返回指定字符第一次出现的字符串内的索引。  空格也占一个字节		System.out.println("I love you forever!".indexOf("forever")); //11				//6.int indexOf(int ch, int fromIndex) 		//返回指定字符第一次出现的字符串内的索引,以指定的索引开始往后搜索。		System.out.println("javaScript.java".indexOf("java", 2)); //11				//7.int lastIndexOf(String str) 		//返回指定子字符串最后一次出现的字符串中的索引。		System.out.println("javaScript.java".lastIndexOf("java")); //11			//8.int lastIndexOf(String str, int fromIndex) 		//返回指定子字符串的最后一次出现的字符串中的索引,从指定索引开始往前搜索。 		System.out.println("javaScript.java".lastIndexOf("java", 14)); //11				//9.String replaceAll(String regex, String replacement) 		//用给定的替换替换与给定的 regular expression匹配的此字符串的每个子字符串。  		//该部分共创建4个字符串对象		System.out.println("javaScript.java".replaceAll("java", "mysql")); //mysqlScript.mysql		//10.String[] split(String regex)         //将此字符串分割为给定的 regular expression的匹配。		String myTime = "2020-02-20";		String[] ymd = myTime.split("-");		for(int i = 0; i < ymd.length; i++){   			System.out.print(ymd[i]+" "); //2020 02 20		}				//11.boolean startsWith(String prefix) 		//测试此字符串是否以指定的前缀开头。  		System.out.println("/helloWorld.java".startsWith("/")); //true				//12.String substring(int beginIndex) 		//返回一个字符串,该字符串是此字符串的子字符串。   截取字符串		System.out.println("/helloWorld.java".substring(6)); //World.java				//13.String substring(int beginIndex, int endIndex) 		//返回一个字符串,该字符串是此字符串的子字符串  到endIndex-1处		System.out.println("/helloWorld.java".substring(6,11)); //World			//14.char[] toCharArray() 		//将此字符串转换为新的字符数组。  	    char[] c3 = "我是赵宇轩".toCharArray();	    for(int i = 0; i < c3.length; i++){   	    	System.out.print(c3[i]+" "); //我 是 赵 宇 轩 	    }	    	    //15.String toUpperCase() 	    //将所有在此字符 String使用默认语言环境的规则大写。	    System.out.println("abcdef".toUpperCase()); //ABCDEF	    	    //16.String toLowerCase() 	    //将所有在此字符 String使用默认语言环境的规则,以小写。	    System.out.println("ABCDEF".toLowerCase()); //abcdef	    	    //17.String trim() 	    //返回一个字符串,其值为此字符串,并删除任何前导和尾随空格。 (中间不删除)	    System.out.println("       I love you forever!     ".trim()); //I love you forever!	    	    //18.static String valueOf(Object obj) 	    //返回 Object参数的字符串 Object形式。  	    Object o = null;	    System.out.println(o); //null 不出现空指针异常,因为String.valueof(Object)这个方法对空值进行重写了!	    System.out.println(String.valueOf(o));//null	    //System.out.println(o.toString()); 会出现空指针异常	}}
上一篇:网页设计.表单
下一篇:Java.数组算法(补充)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年04月04日 16时33分17秒