Java中==和equlas使用比较,instanceof
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
上一篇: Error occurred during initialization of VM java/lang/NoClassDefFoundError: java/lang/Object
下一篇: 获取插入数据的自增ID值
推荐阅读
-
Linux中curl命令和wget命令的使用介绍与比较
-
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
-
微信小程序授权 获取用户的openid和session_key【后端使用java语言编写】,我写的是get方式,目的是测试能否获取到微信服务器中的数据,后期我会写上post请求方式。
-
Java中 equals 和 == 的比较
-
Java中异常上抛和异常捕捉的具体使用案例
-
Java日期时间API系列30-----Jdk8中java.time包中的新的日期时间API类,减少时间精度方法性能比较和使用。
-
Java得到一个整数的绝对值,不使用任何判断和比较语句,包括API
-
java中Properties文件加载和使用方法
-
Java.lang.Arrays中的toString()和sort()基本使用形式
-
python中字符串比较使用is、==和cmp()总结