Java基本数据类型“==”和引用数据类型“==”的区别
程序员文章站
2022-12-08 19:51:24
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。
如图所示:
本文地址:https://blog.csdn.net/sc179/article/details/108030656
上一篇: [PHP] PHP7.4.2安全和修复版本的更改日志
下一篇: ElasticSearch 简介