java,String做参数实参值不变,equals与==浅析

public class Test {

	public static void test(String str) {
		str = "World";
	}///函数结束时这个str自动消失,原来的string值不变,传递的是引用的副本(拷贝)

	public static void main(String[] args) {

		String string = "Hello";
		test(string);
		System.out.println(string);hello

		String s = "abc";
		String t = "a";
		String u = s.substring(0, 1);
		// System.out.println(s.substring(0, 1));
		System.out.println(t.equals(s.substring(0, 1))); // //True
		System.out.println(t == s.substring(0, 1));// /false
		System.out.println(t.equals(u)); //True
		System.out.println(t == u); //false
		System.out.println(u.equals(s.substring(0, 1))); // //True
		System.out.println(u == s.substring(0, 1));// /false //s.substring(0, 1);  是开辟的一个新的String对象
		System.out.println(s.substring(0, 1).equals(s.substring(0, 1)));///true
		System.out.println(s.substring(0, 1) == s.substring(0, 1));///false
		
		Test t1 = new Test();///t1指向Test对象1
		Test t2  = new Test();//t2指向Test对象2
		
		System.out.println(t1.equals(t2)); //false
		System.out.println(t1 == t2); //false
		Test t3 = t1;//t1和t3都指向Test对象1   
		System.out.println(t1.equals(t3)); //true ///比较他俩指向的对象的地址是否相同
		System.out.println(t1 == t3); //true
		System.out.println(t2.equals(t3)); //false
		System.out.println(t2 == t3); //false
		
//		 JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,
//		 这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,
//		 如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了
		
//		== 无论是比较什么都是比较地址是否相同
//		equals(),		String,Integer,Date类中已覆写,是比较内容是否相同;其他的类中仍是比较比较地址是否相同
		
		
	}
}
关于String   str3 ="abc".....的equals(),==比较太简单了,不写了

你可能感兴趣的:(Java)