Java基础之String类

Java常用类之String

String:

 ①final修饰,不可被继承

②实现了Serializable接口,字符串可序列化。实现了Comparable接口,字符串可比较大小。

③String内部定义了 final char [ ] value 接收字符串

④String:代表字符串序列是不可变的,即不可变性

体现:

1.当为String对象重新字面量赋值时,需要在指定的内存中重写,并不会改变原有的value。

2.当String对象调用某些方法时,会有String类型的返回值,并不是直接改变原有的value。

@Test
	public void test1() {
		String str="abc";
		String str1=str;
		str1="def";
		System.out.println(str);
		System.out.println(str1);
		
		String str2=str.replace('a', 'm');
		System.out.println(str2);
		
		
		String s1="123";
		String s2=s1;
		s1+="4";
		System.out.println(s2);
		
	}

⑤ String对象字面量赋值时,会在方法去的字符串常量池中创建。

⑥字符串常量池中不能存放相同的字符串

String的内存结构分析:

        String s1="abc";
		String s2="abc";
		System.out.println(s1==s2);
		String s3=new String("abc");
		String s4=new String("abc");
		System.out.println(s3==s4);

@Test
	public void test2() {
		String s1="javaEE";
		String s2="hadoop";
		
		String s3="javaEEhadoop";
		String s4="javaEE"+"hadoop";
		String s5=s1+"hadoop";
		String s6="javaEE"+s2;
		String s7=s1+s2;
		
		System.out.println(s3==s4);  //true
		System.out.println(s3==s5);	//false
		System.out.println(s3==s6);	//false
		System.out.println(s3==s7); //false
		
		System.out.println("********************");
		String s8=s5.intern();
		System.out.println(s4==s8);
		
	}

规则:

1.常量与常量连接是在字符串的常量池中创建。

2.有变量参与相当于new,在堆空间中创建。

3.调用intern()方法,相当于是在字符串常量池中创建。

public class StringTest {
	String str=new String("good");
	char [] ch=new char[] {'t','e','s','t'};
	public void exchage(String str,char [] ch) {
		str="test ok";
		ch[0]='b';
	}
	public static void main(String[] args) {
		StringTest test=new StringTest();
		test.exchage(test.str, test.ch);
		System.out.println(test.str);
		System.out.println(test.ch);
	}
}

 考察点:

1.String的不可变性

2.值传递问题

String中常用方法:

1.length():返回字符串的长度

@Test
	public void test3() {
		String str="abcdefg";
		System.out.println(str.length());
	}

2.charAt(int index)方法:返回指定下标的字符

@Test
	public void test3() {
		String str="abcdefg";
		System.out.println(str.charAt(0));
	}

3.euqals(Obejct objcet):比较内容是否一致

4. euqalsIgnoreCase(String str):忽略大小写比较内容是否一样

@Test
	public void test3() {
		String str1="abc";
		String str2="Abc";
		System.out.println(str1.equalsIgnoreCase(str2));
	}

5.toLowerCase():将字符串变成小写

@Test
	public void test1() {
		String str="ABC";
		System.out.println(str.toLowerCase());
	}

 6.toUpperCase():将字符串变成大写

@Test
	public void test1() {
		String str="abc";
		System.out.println(str.toUpperCase());
	}

7.compareTo(String str):比较两个字符串大小

@Test
	public void test1() {
		String str1="abc";  // 97 98 99
		String str2="abe"; // 97 98 101
		System.out.println(str2.compareTo(str1));
		System.out.println(str1.compareTo(str2));
		String str3=str1;
		System.out.println(str3.compareTo(str1));
	}

8.contains(String str):是否包含它

@Test
	public void test1() {
		String str1="abcdefg";
		String str2="efg";
		System.out.println(str1.contains(str2));
	}

 9.isEmpty():判断字符串长度是否为0

@Test
	public void test1() {
		String str1="abcdefg";
		System.out.println(str1.isEmpty());
	}

10.index(String str):返回子字符串第一次出现在字符串内的索引

@Test
	public void test1() {
		String str="abcdefg";
		System.out.println(str.indexOf("defg"));
	}

11.index(String str,int fromIndex):从指定下标开始,返回子字符串第一次出现在字符串内的索引

@Test
	public void test1() {
		String str="abcdefgabcdefg";
		System.out.println(str.indexOf("defg",7));
	}

12.lastIndexOf(String str):从右往左,第一次出现的下标

@Test
	public void test1() {
		String str="abcdefgabcdefg";
		System.out.println(str.lastIndexOf("def"));
	}

13.lastIndexOf(String str,int fromIndex):从制定下标往左,第一次出现的下标

@Test
	public void test1() {
		String str="abcdefgabcdefg";
		System.out.println(str.lastIndexOf("def",7));
	}

14.subString(int fromIndex):从下标开始截取

@Test
	public void test1() {
		String str="abcdefgabcdefg";
		System.out.println(str.substring(2));
	}

15.subString(int fromIndex,int endIndex): 左闭右开

@Test
	public void test1() {
		String str="abcdefgabcdefg";
		System.out.println(str.substring(2,6));
	}

16.repalce(char target,char newchar):将字符target全部换为newchar

@Test
	public void test1() {
		String str="abbbbbbbba";
		System.out.println(str.replace('a', 'm'));
		
	}

17.replaceFirst(String target,String source):将匹配的第一个字符串用source替换

@Test
	public void test1() {
		String str="ababababab";
		System.out.println(str.replaceFirst("ab","m" ));
		
	}

18.replaceAll(String target,String source):将所有符合的字符串替换

@Test
	public void test1() {
		String str="ababababab";
		System.out.println(str.replaceAll("ab","m" ));
		
	}

19.split(String str):以str分割

@Test
	public void test1() {
		String str="a,b,c,d";
		String [] arr=str.split(",");
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
		
	}

20.trim():去除字符串首尾的空格

@Test
	public void test1() {
		String str=" a b c d ";
		System.out.println(str);
		System.out.println(str.trim());
		
	}

21.startWith(String str):判断是否以str开头

@Test
	public void test1() {
		String str="abcdef";
		System.out.println(str.startsWith("abc"));
	}

22..startWith(String str,int fromIndex):指定位置判断是否以str开头

@Test
	public void test1() {
		String str="abcdefabc";
		System.out.println(str.startsWith("abc",6));
	}

23.endwith(String str):判断是否以str结尾

@Test
	public void test1() {
		String str="abcdefabc";
		System.out.println(str.endsWith("abc"));
	}

String与字符数组之间的转换:

①String->字符数组

@Test
	public void test1() {
		String str="abcd";
		char [] ch=str.toCharArray();
		System.out.println(ch);
	}

②字符数组->String

@Test
	public void test1() {
		String str="abcd";
		char [] ch=str.toCharArray();
		System.out.println(ch);
		
		String str1=new String(ch);
		System.out.println(str1);
	}

String与字节数组之间的转换:

①String->字节数组

@Test
	public void test1() {
		String str="abcd";
		byte [] b= str.getBytes();
		for(int i=0;i<b.length;i++) {
			System.out.print(b[i]+"\t");
		}
	}

②字节数组->String

@Test
	public void test1() {
		String str="abcd";
		byte [] b= str.getBytes();
		for(int i=0;i<b.length;i++) {
			System.out.print(b[i]+"\t");
		}
		
		String str1=new String(b);
		System.out.println(str1);
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值