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

Java中==和equlas使用比较,instanceof

程序员文章站 2022-06-28 17:26:57
==java中虽然有引用传递和值传递但只会值传递对于对象参数,值的内容是对象的引用基本数据类型除Boolean都可以用==来判断是否是值相等 public static void main(String[] args) {int int_1=100;double double_1=100.0;if(double_1 == int_1 ){//本以为会是false,结果网上搜了之后,会自动转换。涉及到机组,以后买了书再来分析System.out.println("true")...

java中虽然有引用传递和值传递但只会值传递对于对象参数,值的内容是对象的引用

基本数据类型除Boolean都可以用==来判断是否是值相等

 public static void main(String[] args) { int int_1=100; double double_1=100.0; if(double_1 == int_1 ){//本以为会是false,结果网上搜了之后,会自动转换。涉及到机组,以后买了书再来分析 System.out.println("true"); } System.out.println(double_1 == int_1); } 

Integer 与 int

Integer 是 int 的包装类,int 则是 java 的一种基本数据类型

public static void main(String[] args) { int int_01=100; Integer integer_01=100; Integer integer_02=new Integer(100); System.out.println(int_01 == integer_01);//true System.out.println(int_01 == integer_02);//true int int_11=10000; Integer integer_11=10000; Integer integer_12=new Integer(10000); System.out.println(int_11 == integer_11);//true System.out.println(int_11 == integer_12);//true } 

结论:基本数据类型与自己的包装类比较时都相等不管是不是new对象

Integer 与 Integer 比较

public static void main(String[] args) { Integer integer_1=100; Integer integer_11=127; Integer integer_111=128; Integer integer_1111=5555; Integer integer_2=100; Integer integer_22=127; Integer integer_222=128; Integer integer_2222=5555; System.out.println(integer_1 == integer_2);//true System.out.println(integer_11 == integer_22);//true System.out.println(integer_111 == integer_222);//false System.out.println(integer_1111 == integer_2222);//false } 

结论:通过网上查阅,得出结论当第一个变量integer的值在-128~127之间时会缓存值,下一次出现同一值时不会去new对象并且
Integer integer_1 = 100 在编译时,会翻译成为 Integer integer_1 = Integer.valueOf(100)

Integer 与 new Integer() 比较

public static void main(String[] args) { Integer integer_1=100; Integer integer_11=127; Integer integer_111=128; Integer integer_1111=5555; Integer integer_2=new Integer(100); Integer integer_22=new Integer(127); Integer integer_222=new Integer(128); Integer integer_2222=new Integer(5555); Integer integer_3=new Integer(100); Integer integer_33=new Integer(127); Integer integer_333=new Integer(128); Integer integer_3333=new Integer(5555); System.out.println(integer_1 == integer_3);//true System.out.println(integer_11 == integer_33);//true System.out.println(integer_111 == integer_333);//true System.out.println(integer_1111 == integer_3333);//true System.out.println(integer_2 == integer_3);//true System.out.println(integer_22 == integer_33);//true System.out.println(integer_222 == integer_333);//true System.out.println(integer_2222 == integer_3333);//true  } 

结论:很明显全是false,new对象时是在堆空间新建对象,Integer integer_1=100时是将值放在常量池

String 与 String 比较

public static void main(String[] args) { String string1="a"; String string11="ab"; String string111="aa"; String string1111="a"+string1; String string11111="aa"; String string2="a"; String string22="a"+"b"; String string222="a"+string1; String string2222="a"+string1; String string22222=string1+string2; System.out.println(string1 == (string2));//@1 System.out.println(string11 == (string22));//@2 System.out.println(string111 == (string222));//@3 System.out.println(string1111 == (string2222));//@4 System.out.println(string11111 == (string22222));//@5 } 

结果:
true
true
false
false
false
结论:因为String string1="a"是将值放在常量池,所以@1为true ,@2字符串拼接也为true是因为"a"与"b"都在常量池中,编译器直接拼接当成常量相加,没有new新对象,但@3@4@5都是后面加了一个字符串变量后就变了,是因为编译器不会去优化,不会去做常量处理于是我将string1与string2定义为常量后:

public static void main(String[] args) { final String string1="a"; String string11="ab"; String string111="aa"; String string1111="a"+string1; String string11111="aa"; final String string2="a"; String string22="a"+"b"; String string222="a"+string1; String string2222="a"+string1; String string22222=string1+string2; System.out.println(string1 == (string2)); System.out.println(string11 == (string22)); System.out.println(string111 == (string222)); System.out.println(string1111 == (string2222)); System.out.println(string11111 == (string22222)); } 

结果:全为true

String 与 new String() 比较

本文地址:https://blog.csdn.net/qq_43554177/article/details/108023318

相关标签: ==与equals java