欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java基本数据类型“==”和引用数据类型“==”的区别

程序员文章站 2022-05-12 18:34:58
1 对于基本数据类型来说,“==”是进行数值的比较;int a = 1;int b = 1;System.out.println(a == b);// true,a和b存的都是数值1,数值相同2 对于引用数据类型来说,“==”是进行地址值的比较。int[] c = {1, 2, 3, 4};int[] d = {1, 2, 3, 4};System.out.println(c == d);// false,c和d各自存一个数组对象的地址值,地址值不同3 特殊情况(字符串常量池)new的...



1 对于基本数据类型来说,“==”是进行数值的比较

int a = 1;
int b = 1;
System.out.println(a == b);// true,a和b存的都是数值1,数值相同 

2 对于引用数据类型来说,“==”是进行地址值的比较

int[] c = new int[]{1, 2, 3, 4};
int[] d = new int[]{1, 2, 3, 4};
System.out.println(c == d);// false,c和d分别存两个不同数组对象的地址值,地址值不同 

3 “==”与常量池

通过双引号(字面量)的方式创建(直接创建)的字符串对象存储在常量池中。

String str1 = "abc"; // 通过字面量的方式创建字符串对象
String str2 = "abc";// 通过字面量的方式创建字符串对象

char[] charArray = {'a', 'b', 'c'};
String str3 = new String(charArray);// 通过构造函数的方式创建字符串对象

System.out.println(str1 == str2);// true
System.out.println(str1 == str3);// false
System.out.println(str2 == str3);// false 

解释:
1 采用双引号的方式创建一个字符串时,JVM首先会去字符串池中查找是否存在"abc"这个对象,如果不存在,则在字符串常量池中创建"abc"这个对象,然后将池中"abc"这个对象的引用地址返回给"abc"对象的引用str1,这样str1会指向字符串常量池中"abc"这个字符串对象;如果存在,则不创建任何对象,直接将池中"abc"这个对象的地址返回,赋给引用str2。因为str1、str2都是指向同一个字符串池中的"abc"对象,所以结果为true。

2 而通过new出来的字符串对象“abc”则存储在堆内存的非常量池中,所以是不同的引用,结果为false。

如图所示:
Java基本数据类型“==”和引用数据类型“==”的区别

本文地址:https://blog.csdn.net/sc179/article/details/108030656