String 初始化 equals ==

  1. 一、 String初始化:

有两种方法,都是返回一个String对象的引用,但是jvm对两者的处理方式是不一样的。

  1. 第一种,jvm会马上在heap(堆)中创建一个String对象,然后将该对象的引用返回给用户。
  2. 第二种,jvm首先会在内部维护的strings pool中通过String的 equels 方法查找是对象池中是否存放有该String对象:
  • 如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;
  • 如果没有,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。
 二、比较 == 和 equals

  1. "=="操作符的作用

  • 用于基本数据类型的比较;
  • 判断引用是否指向堆内存的同一块地址。
   2.equals
  • equals所在位置:

在Object类当中,而Object是所有类的父类,包含在jdk里面,但并不适合绝大多数场景,通常需要重写:

public boolean equals(Object obj) {
        return (this == obj);
    }

  • equals的作用:

用于判断两个变量是否是对同一个对象的引用,即堆中的内容是否相同,返回值为布尔类型

boolean b = obj1.equals(obj2);
例子:
public class Initialize {

	public static void main(String[] args) {
		String str1 = new String("abc");
//	str2和str3是内存的同一内容,不同名;
		String str2 = "abc";
		String str3 = "abc";
		
//   	== 判断引用是否指向堆内存的同一块地址	
		if (str1 == str2){
			System.out.println("str1 == str2");
		}
		if (str1 != str2) {
			System.out.println("str1 != str2");
		}

		if (str2 == str3){
			System.out.println("str1 2== str3");
		}

		
		System.out.println("str1.equals(str2) = " + str1.equals(str2) );
		System.out.println("str2.equals(str3) = " + str2.equals(str3) );
	}

}


 输出为: 
  

str1 != str2
str1 2== str3
str1.equals(str2) = true
str2.equals(str3) = true






你可能感兴趣的:(java)