java字符串中equals方法与==的区别比较

今天学习了一些String的方法;结合看了一些JDK的String的源码,对于equals与==有了比较深刻的理解,在这里分享一下学习心得,也可以让我们后来回顾。-----------------------------------------------------------------------人生没有白走的路,每一步都算数。

这里贴上演示用代码;

package test1;

import java.util.Scanner;

public class testequals {
	public static void main(String[] args) {
		/**
		 * 测试新建的两个str赋值如果相同
		 * equals方法与==究竟有什么差异
		 */
		Scanner input = new Scanner(System.in);
		String str2 = new String();
		String str1 = input.next();//接收从控制台输入的abcde赋值给str1
		str2 = "abcde";
		System.out.println(str1.equals(str2));
		System.out.println(str1==str2);
		String str3 = "abcde";
		String str4 = "abcde";
		System.out.println(str3.equals(str4));
		System.out.println(str3==str4);
	}

}

运行结果截图:

结果分析:

可以看出,从控制台输入abcde后,虽然str1与str2内容相等,但是由于二者不是从同一个类而来,在用==判断时,依然返回false。在java中,会有常量池的概念,通俗的说,就是常量待的地方,str3与str4就是常量,equals与==都是 相等的。

总结:

二,关于equals与==比较

1 ,equals比较的是字符串是否相等,JDK首先判断比较的二者是否是同一个对象,若是,返回true,若不是,建立数组将二者字符一一存放进去,从第一个字符开始,一 一比较,若所有字符均相同,则返回true,否则,返回false。

2, == 比较的是二者是否是同一个对象,若是,返回true,否则,返回false。ESP:若比较的二者是常量定义,而不是通过新建对象,由于在java里面有常量池,所以也是返回true。

3 定义字符串可以这样:

String s1 =new String(“Hello World!”);

也可以

String s1 =“Hello World!”;//用双引号括住的一串字符

Java编译器自动为每个字符串常量生成一个String类的实例

 

   String s1=“Hello World!”;

   String s2=“Hello World!”;

  此时:s1==s2;两个字符串在内存空间中的存放如下:

但是如果按照下面形式:

String s1=new String(“Hello World!”);

String s2=new String(“Hello World!”);

java就会为s1,s2,对应两个内存地址,二者不相等。

内存地址如下:

猜你喜欢

转载自blog.csdn.net/m0_37990602/article/details/81275405