知识点:java之String方法

java-String方法

1、String的两种类创建方式

//第一种:
String name1="Tom";
		String name2="Tom";
		//==在引用类型中比较地址
		System.out.println(name1==name2);

//第二种:
		String name3 = new String("lucy");
		String name4 = new String("Lucy");
		System.out.println(name3==name4);//另外开辟常量池

编译结果:

true
false

第一种中Tom是存在于常量池中,name1,name2均保存在栈中,常量池中Tom有一个地址,name1和name2中存放的就是Tom的地址,编译时会优先在常量池中寻找是否已经存在有Tom,有的话直接将地址存进需赋值的name1或name2栈中,。

第二种中会另外开辟常量池来存放Tom,所以name3和name4中Lucy的地址是不同的,在用==比较是结果即为false。
注: = =在引用类型中是用来比较地址的。

2、String中的常用方法

length(),startsWith(),endsWith(),equals(),equalsIgnoreCase(),
indexOf(),lastIndexOf(),substring(),trim(),replaceAll(),split()

String name1="Welcome to ZZU university.";
		
		System.out.println(name1.length());//得到字符串长度
		
		System.out.println(name1.startsWith("Wel"));//判断字符串是否以某个字符串开头
		System.out.println(name1.endsWith("sity."));//判断字符串是否以某个字符串结尾
		
		System.out.println(name1.equals("Welcome to ZZU university."));//判断两个字符串是否相同
		System.out.println(name1.equals("welcome to ZZU university."));
		
		System.out.println(name1.equalsIgnoreCase("welcome to ZZU university."));//忽略大小写判断两个字符串是否相同
		
		
		
		String letters = "abcdef";
		System.out.println(letters.indexOf("a"));//获取某个字符串在原来字符串中第一次出现的位置,从0开始查找
		System.out.println(letters.indexOf("d"));
		System.out.println(letters.indexOf("bcd"));//将bcd看做一个整体
		
		letters = "abcdedcba";
		System.out.println(letters.lastIndexOf("b"));//获取某一个字符串第一次出现的位置,从最后一个字符开始找,但位置仍从第一个开始数
		
		
		String sub = letters.substring(0);//从第0个字符开始截取到最后,再赋值给变量
		System.out.println(sub);
		
		sub = letters.substring(1);//从第0个字符开始截取到最后,再赋值给变量
		System.out.println(sub);	
		
		//重写:
		sub = letters.substring(1,4);//从位置为1的字符(b)开始截取,直到位置为4(e)的字符,但不包括位置为4的字符
		System.out.println(sub);

			
		String name = "  T o m  ";
		System.out.println(name.length());//返回字符串长度,包括空格
		System.out.println(name.trim());//去掉字符串左右两边的所有空格
		System.out.println(name.trim().length());//得到去掉空格后的字符串长度
		
		String name1="Tim#july#Jack";
		name1 = name1.replaceAll("#", "&");//把字符串中#改成&
		System.out.println(name1);
		
		String [] name2 = name1.split("&");//把字符串按&分割成数组
		for(String n:name2) {
			System.out.println(n);//输出数组里的元素
		}

其中很多方法都存在重写的形式。

4.String与StringBuffer

		Student student = new Student();
		System.out.println(student);//直接输出对象时,调用对象的 toString方法返回值结果
		//可以通过在对象中重写 toString方法来验证
		
		String name0 = new String("Ketty");//创建了两个String类型对象
		
		String name1 = "Jim";//一个String类型对象
		
		String name2 = "Ka"+"te";//一个String类型对象
		
		String str = "To";
		String name3 = str+"mmy";//创建两个String类型对象
		
		String letters = "a";
		for(int i=1;i<3;i++) {
			letters = "a"+letters;
		}//共创建了3个String类型对象,每循环一次创建一次新的对象
		
		StringBuffer sb = new StringBuffer("a");
		for(int i=1;i<3;i++) {
			sb.append("a");//拼接
		}//只有创建一个对象
		System.out.println(sb.toString());//转换为String类型
		
		System.out.println(sb.length());//返回长度
		
		sb = new StringBuffer("abcde");
		System.out.println(sb.reverse());//将字符反转

总结: 可以用StringBuffer来节省内存

4.==和equals的区别

1.对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

“==”比较两个变量本身的值,即两个对象在内存中的首地址。

“equals()”比较字符串中所包含的内容是否相同。

2.对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

3.如果是基本类型比较,那么只能用 ==来比较,不能用equals,如int 类型的变量在用equals时编译不能通过。

扫描二维码关注公众号,回复: 11028052 查看本文章
public class Test {
	public static void main(String[] args) {
		//String equals ==
		//基本数据类型比较值
		int a=12;
		int b=12;
		System.out.println(a==b);
		System.out.println(12==12);//二者等价相同,都是只的比较
		//引用类型比较地址
		Test t1 = new Test();//实例化
		Test t2 = new Test();
		System.out.println(t1==t2);//二者地址不同,存放于不同的栈
		
		//String中的equal只是比较内容是否相同
		String name1 = "Tom";
		String name2 = "Tom";
		Object obj = name2;
		System.out.println(name1.equals(obj));//此处查看equals底层代码,String中的equals是Object中的equals的重写,Object中的equals只是比较地址

		
		Test test  = new Test();
		obj = test;
		System.out.println(name1.equals(obj));//二者地址就不相同,并且obj不属于String类型,在第一个if和第二个if中就不成立,返回false
		
		String name3 = new String("Tom");
		obj = name3;
		System.out.println(name1.equals(obj));//obj下转型为String
		
		String name4 = new String("To");
		obj = name4;
		System.out.println(name1.equals(obj));//比较长度是否相同
		
		}
}

编译结果为:

true
true
false
true
false
true
false

equals原代码分析:

//==与equals
		//==:基本数据类型比较值是否相等;引用类型比较地址是否相同
		int a=0;
		double b=0.0;
		System.out.println(a==b);
		
		String str1 = new String("Jim");
		String str2 = new String("Jim");
		System.out.println(str1==str2);
		
		//equals
		//Object类中equals比较的是地址是否相等;String类重写了equals,比较两个字符串内容是否相同
		String name1 = "Jim";
		String name2 = "Jim";
		System.out.println(name1.equals(name2));
		System.out.println(name1.equals(new Test()));
		
		
		//equals源代码:
		  public boolean equals(Object anObject) {abObject变量存的是上转型对象的地址
        if (this == anObject) {//比较地址是否相同(若相同则为同一个对象,则内容也一定相同)
            return true;
        }
        if (anObject instanceof String) {//判断anObject变量所指向的对象是否是String类型
            String anotherString = (String)anObject;//将上转型对象下转型
            int n = value.length;//调用equals方法的String对象每个字符组成的char类型数组的长度
            if (n == anotherString.value.length) {//判断两字符串长度是否相同
                char v1[] = value;//用调用equals方法的String对象每个字符组成的char类型数组给v1赋值
                char v2[] = anotherString.value;//用anObject字符串每个字符组成的char类型数组给v2赋值
                int i = 0;
                while (n-- != 0) {//判断每一位字符是否相同
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }
		 
发布了30 篇原创文章 · 获赞 33 · 访问量 1282

猜你喜欢

转载自blog.csdn.net/weixin_45949075/article/details/103431367