JAVA入门5 String

Java String

equals 和==的区别

(1)对于基本类型来说,没有equals方法,只能用==, 比较的是值
(2)对于引用类型来说,==比较的是引用地址, equals默认情况下,比较的也是引用地址。
但是我们可以重写equals方法,来达到比较值的目的。 其中有一个特殊的类 String, 在jdk源码里面已经重写了equals方法,实现了equals方法比较值
(3)重写equals方法,一定要重写hashcode方法。 如果重写了equals,没有重写hashcode,会导致使用hash算法的集合出问题,比如HashMap 导致值找不到。

(4) 如果两个变量 equals返回true, 那么两个变量的hashcode一定相同。 两个变量的hashcode相同,equals方法不一定返回true.

String 代码演示

package com.javabase;

public class StringTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a=" aadbbdfdfdsssfee e ";
		System.out.println("字符串长度:"+a.length());
		System.out.println("字符串 截取2到5(不包含5):"+a.substring(2, 5));
		System.out.println("字符串 去掉两边的空格:"+a.trim());
		System.out.println("字符串 获取3号位置的字符:"+a.charAt(3));
		System.out.println("字符串长度:连接两个字符串"+a.concat("ttt"));
		System.out.println("字符 返回相同的字符的下标,如果没有就返回-1:"+a.indexOf("bb"));
		System.out.println("字符串长度:");
		//1,先到字符串池里面找,有没有yyyy,有就从池里返回,不需要在堆里创建yyyy
		//2, 如果池里没有,就在堆里创建一个新的yyyy,并且拷贝到字符串池
		
		String test1="yyyy";
		// 不检查字符串池,直接在堆里新建一个yyyy
		String test2= new String("yyyy");
		//这次池里有yyyy,直接返回了yyyy,所以和第一内存地址是一样的
		String test3="yyyy";
		String test4="yy";
		//只要有+,就要在堆里新创建
		String test5=test4+"yy";
		System.out.println("test1.equals(test2):"+test1.equals(test2));
		System.out.println("test1.equals(test3):"+test1.equals(test3));
		System.out.println("test1.equals(test5):"+test1.equals(test5));
		
		System.out.println("test1==test2:"+(test1==test2));
		System.out.println("test1==test3):"+(test1==test3));
		System.out.println("test1.equals(test5):"+(test1==test5));
		//1,先到字符串池里面找(使用了equals),找到了,直接把池里的返回
		//2, 如果没,就在池里新建一个,并且把池里新建的这个返回
		String test6=test2.intern();
		String test7="yyyy".intern();
		System.out.println("test1==test2:"+(test1==test2));
		System.out.println("test1==teest6):"+(test1==test6));
		System.out.println("test1==test7):"+(test1==test7));
		//创建了两个对象
		//一个在堆里的abc
		//一个在字符串池里的abc
		String s=new String("abc");
		
		//创建了4个对象
		String s1="aaaa"+new String("zzzz");
		//只创建了一个ttttuuuu
		String s2="tttt"+"uuuu";
	
	}

}

字符串长度:20
字符串 截取2到5(不包含5):adb
字符串 去掉两边的空格:aadbbdfdfdsssfee e
字符串 获取3号位置的字符:d
字符串长度:连接两个字符串 aadbbdfdfdsssfee e ttt
字符 返回相同的字符的下标,如果没有就返回-1:4
字符串长度:
test1.equals(test2):true
test1.equals(test3):true
test1.equals(test5):true
test1test2:false
test1
test3):true
test1.equals(test5):false
test1test2:false
test1
teest6):true
test1==test7):true

猜你喜欢

转载自blog.csdn.net/h356363/article/details/89641521