Java判断两个变量是否相等有两种方式:==运算符 和 equals()方法

(1)"=="

——如果两个变量是基本类型变量,且都是数值类型(类型不需要相等),则只要变量相等,就返回true

基本类型:整数类型、字符类型char、浮点类型、布尔类型boolean
数值类型:整数类型 + 浮点类型
1)整数类型:byte、short、int、long、char
2) 浮点类型:float、double

(2)equals方法

——只需要它们引用字符串对象里包含的字符序列相同,即可认为对象相等。

public class 判断相等
{
	public static void main(String[] args)
	{

		var a = 65;//基本类型,数值类型
		var b = 65.0f;
		System.out.println(a == b);//输出true

		var c = 'A';
		System.out.println(a == c);//输出true(都属于数值类型且相等)

		//对于引用变量,如果指向于同一个对象,==才会返回true
		var s1 = new String("hello");
		var s2 = new String("hello");
		//堆内存中的两个字符串对象s1、s2会引用常量池中同一个字符串"hello"
		System.out.println(s1 == s2);//输出false
		
		System.out.println(s1.equals(s2));//输出true
	}
}

【字符串的比较】:

由于字符串本质是:char[ ]数组,可以另外解释:

String a = "ABC";//基本类型,数值类型
		String b = "ABC";
		String c = new String("ABCD");
		String d = new String("ABCD");

		System.out.println(a == b);//输出true
		System.out.println(c == d);//输出false

解析:
字符串的创建】:1)直接赋值: String str = “ABC”;
——变量str指向了方法区常量池中的内容。
2)通过构造器来创建:String str2 = new String(“ABCD”);
——先到方法区常量池中看一下有没有存在该字符串常量,有的话就不会创建新的地址,堆内存中直接引用常量池中的内容,再把str2指向堆内存;如果没有,就会创建一个字符串常量,放到常量池当中。但只要使用了new,就会创建一个对象。

【比较两个字符串是否相等】:
1) == :比较内存地址,
对于直接赋值:引用的都是常量池中同一个字符串,故为输出为:true.

对于通过String构造器来new一个(创建)字符串:String str = new String(“ABCD”)

步骤

  1. 在堆里开辟一个空间,即创建对象0x0001;
  2. 方法区常量池中没有"ABCD",故在其中创建一个"ABCD常量";
  3. 堆内存中的对象引用方法区中的常量值
  4. 把堆中的地址赋值给str

    由于通过==比较两个引用变量,对比的是str的地址,str指向的是不同对象,故而不相等,返回false。
    2)object中定义的equal()方法——str1.equal(str2) :逐个判断内部字符是否相等。