基本类型和包装类对象使用 == 和 equals进行比较的结果?

1、值不同,使用 == 和 equals() 比较都返回 false

2、值相同

使用 == 比较:

  • 基本类型 - 基本类型、基本类型 - 包装对象返回 true
  • 包装对象 - 包装对象返回 false
  • 缓存中取的包装对象比较返回 true(原因是 JVM 缓存部分基本类型常用的包装类对象,如 Integer -128 ~ 127 是被缓存的)
  1. Integer i1 = 100;
  2. Integer i2 = 100;
  3. Integer i3 = 200;
  4. Integer i4 = 200;
  5. System.out.println(i1==i2); //打印true
  6. System.out.println(i3==i4); //打印false

使用 equals() 比较

  • 包装对象-基本类型返回 true
  • 包装对象-包装对象返回 true

3、不同类型的对象对比,返回 false

JDK1.8,实验代码

  1. byte b1 = 127;
  2. Byte b2 = new Byte("127");
  3. Byte b3 = new Byte("127");
  4. System.out.println("Byte 基本类型和包装对象使用 == 比较 : " + (b1 == b2));
  5. System.out.println("Byte 基本类型和包装对象使用 equals 比较 : " + b2.equals(b1));
  6. System.out.println("Byte 包装对象和包装对象使用 == 比较 : " + (b2 == b3));
  7. System.out.println("Byte 包装对象和包装对象使用 equals 比较 : " + b2.equals(b3));
  8. System.out.println();
  9. short s1 = 12;
  10. Short s2 = new Short("12");
  11. Short s3 = new Short("12");
  12. System.out.println("Short 基本类型和包装对象使用 == 比较 : " + (s1 == s2));
  13. System.out.println("Short 基本类型和包装对象使用 equals 比较 : " + s2.equals(s1));
  14. System.out.println("Short 包装对象和包装对象使用 == 比较 : " + (s2 == s3));
  15. System.out.println("Short 包装对象和包装对象使用 equals 比较 : " + s2.equals(s3));
  16. System.out.println();
  17. char c1 = 'A';
  18. Character c2 = new Character('A');
  19. Character c3 = new Character('A');
  20. System.out.println("Character 基本类型和包装对象使用 == 比较 : " + (c1 == c2));
  21. System.out.println("Character 基本类型和包装对象使用 equals 比较 : " + c2.equals(c1));
  22. System.out.println("Character 包装对象和包装对象使用 == 比较 : " + (c2 == c3));
  23. System.out.println("Character 包装对象和包装对象使用 equals 比较 : " + c2.equals(c3));
  24. System.out.println();
  25. int i1 = 10000;
  26. Integer i2 = new Integer(10000);
  27. Integer i3 = new Integer(10000);
  28. System.out.println("Integer 基本类型和包装对象使用 == 比较 : " + (i1 == i2));
  29. System.out.println("Integer 基本类型和包装对象使用 equals 比较 : " + i2.equals(i1));
  30. System.out.println("Integer 包装对象和包装对象使用 == 比较 : " + (i2 == i3));
  31. System.out.println("Integer 包装对象和包装对象使用 equals 比较 : " + i2.equals(i3));
  32. System.out.println();
  33. long l1 = 1000000000000000L;
  34. Long l2 = new Long("1000000000000000");
  35. Long l3 = new Long("1000000000000000");
  36. System.out.println("Long 基本类型和包装对象使用 == 比较 : " + (l1 == l2));
  37. System.out.println("Long 基本类型和包装对象使用 equals 比较 : " + l2.equals(l1));
  38. System.out.println("Long 包装对象和包装对象使用 == 比较 : " + (l2 == l3));
  39. System.out.println("Long 包装对象和包装对象使用 equals 比较 : " + l2.equals(l3));
  40. System.out.println();
  41. float f1 = 10000.111F;
  42. Float f2 = new Float("10000.111");
  43. Float f3 = new Float("10000.111");
  44. System.out.println("Float 基本类型和包装对象使用 == 比较 : " + (f1 == f2));
  45. System.out.println("Float 基本类型和包装对象使用 equals 比较 : " + f2.equals(f1));
  46. System.out.println("Float 包装对象和包装对象使用 == 比较 : " + (f2 == f3));
  47. System.out.println("Float 包装对象和包装对象使用 equals 比较 : " + f2.equals(f3));
  48. System.out.println();
  49. double d1 = 10000.111;
  50. Double d2 = new Double("10000.111");
  51. Double d3 = new Double("10000.111");
  52. System.out.println("Double 基本类型和包装对象使用 == 比较 : " + (d1 == d2));
  53. System.out.println("Double 基本类型和包装对象使用 equals 比较 : " + d2.equals(d1));
  54. System.out.println("Double 包装对象和包装对象使用 == 比较 : " + (d2 == d3));
  55. System.out.println("Double 包装对象和包装对象使用 equals 比较 : " + d2.equals(d3));
  56. System.out.println();
  57. boolean bl1 = true;
  58. Boolean bl2 = new Boolean("true");
  59. Boolean bl3 = new Boolean("true");
  60. System.out.println("Boolean 基本类型和包装对象使用 == 比较 : " + (bl1 == bl2));
  61. System.out.println("Boolean 基本类型和包装对象使用 equals 比较 : " + bl2.equals(bl1));
  62. System.out.println("Boolean 包装对象和包装对象使用 == 比较 : " + (bl2 == bl3));
  63. System.out.println("Boolean 包装对象和包装对象使用 equals 比较 : " + bl2.equals(bl3));

运行结果

  1. Byte 基本类型和包装对象使用 == 比较 : true
  2. Byte 基本类型和包装对象使用 equals 比较 : true
  3. Byte 包装对象和包装对象使用 == 比较 : false
  4. Byte 包装对象和包装对象使用 equals 比较 : true
  5. Short 基本类型和包装对象使用 == 比较 : true
  6. Short 基本类型和包装对象使用 equals 比较 : true
  7. Short 包装对象和包装对象使用 == 比较 : false
  8. Short 包装对象和包装对象使用 equals 比较 : true
  9. Character 基本类型和包装对象使用 == 比较 : true
  10. Character 基本类型和包装对象使用 equals 比较 : true
  11. Character 包装对象和包装对象使用 == 比较 : false
  12. Character 包装对象和包装对象使用 equals 比较 : true
  13. Integer 基本类型和包装对象使用 == 比较 : true
  14. Integer 基本类型和包装对象使用 equals 比较 : true
  15. Integer 包装对象和包装对象使用 == 比较 : false
  16. Integer 包装对象和包装对象使用 equals 比较 : true
  17. Long 基本类型和包装对象使用 == 比较 : true
  18. Long 基本类型和包装对象使用 equals 比较 : true
  19. Long 包装对象和包装对象使用 == 比较 : false
  20. Long 包装对象和包装对象使用 equals 比较 : true
  21. Float 基本类型和包装对象使用 == 比较 : true
  22. Float 基本类型和包装对象使用 equals 比较 : true
  23. Float 包装对象和包装对象使用 == 比较 : false
  24. Float 包装对象和包装对象使用 equals 比较 : true
  25. Double 基本类型和包装对象使用 == 比较 : true
  26. Double 基本类型和包装对象使用 equals 比较 : true
  27. Double 包装对象和包装对象使用 == 比较 : false
  28. Double 包装对象和包装对象使用 equals 比较 : true
  29. Boolean 基本类型和包装对象使用 == 比较 : true
  30. Boolean 基本类型和包装对象使用 equals 比较 : true
  31. Boolean 包装对象和包装对象使用 == 比较 : false
  32. Boolean 包装对象和包装对象使用 equals 比较 : true

ps:可以延伸一个问题,基本类型与包装对象的拆/装箱的过程

Java

==和equals的区别是什么?

2020-7-23 10:33:03

Java

什么是装箱?什么是拆箱?装箱和拆箱的执行过程?常见问题?

2020-7-23 10:41:30

本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
⚠️
本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索