zoukankan      html  css  js  c++  java
  • == 和 equals() 的区别

    == 和 equals() 的区别

    • 基本数据类型:
      • 六数字 :byte、short、int、long、float、double;
      • 一布:boolean
      • 一字节:char
    == 比较运算符

    比较的是内存地址

    在比较 基本 数据类型的时候比较的是他们的 值 是否相等

    在比较 引用 数据类型的时候比较的是他们的引用(内存地址)是否相等<是否指向同一个对象>

    注意:你可以用==来比较基本数据类型和它对应的包装类,二者类型兼容可比较(java底层给你自动转换了)若不兼容,编译会报错

    这里还需要注意char类型,它比较的是字符的ASCLL码值。具体char的玩法自己去研究吧。

    equals() 方法

    该方法是Object的一个方法,因为java中所有的类都默认继承了Object类,所以,所有的类对象都可以使用此方法。如果有特殊要求还可以对这个方法进行重写。

    因为它是一个方法,所以基本数据类型的变量是点不出这个方法的哟,它只能用于引用类型的比较

    他在比较File、Date、String 及其包装类,比较的是对象的内容是否相等,因为这些特殊的类都重写了equals()方法,

    比较其他类型的时候,比较的是他们的引用(内存地址)是否相等<是否指向同一个对象>

    String对象的创建

    字面量创建String对象

    虽然创建了两个变量,但c和c2引用的是常量池中的同一个 "崩坏酱"。(常量池 位于堆中单独的一块内存区域)

    • 在创建的过程中,系统会先去常量池中找 有没有 "崩坏酱" 这个字符串,如果有,则将引用赋值给c和c2;如果没有则会在常量池中添加 "崩坏酱" 这个字符串,然后再赋值给c和c2.

       String c = "崩坏酱";
       String c2 = "崩坏酱";
       //所以
       System.out.println(c==c2); // true 
      
    new创建String对象
    • 在创建的过程中,系统会先去常量池中找有没有 "律化娜" 这个字符串,如果有,则直接在堆中创建 "律化娜" 这个对象,然后把引用赋值给a和b;如果没有则会在常量池中添加 "律化娜" 这个字符串,然后在堆中创建一个 "律化娜" 对象,再把这个对象的引用赋值给a和b
      String a = new String("律化娜");
      String b = new String("律化娜");
      • 总结:字面量创建字符串比new的方式创建更高效,更省内存。
    字符串相加问题

    String字面量相加,如果一开始常量池中没有"崩坏";这种情况现在的JVM做优化以后,它会将相加的结果 "崩坏" 直接添加到常量池中,而不会添加 "崩"、"坏"、"崩坏" 三个字符串,然后再将"崩坏"的引用赋值给s。

    String s = "崩"+"坏";
    

    String对象相加,java会通过StringBuilder去实现这三个对象的相加,同样的情况,如果常量池中没有"233",它会先在常量池中添加2和3 ,然后根据相加的结果在堆中创建一个"233"字符串对象,然后把这个对象的引用赋值给s2.

    String s2 = new String("2")+new String("3")+new String("3");
  • 相关阅读:
    echart所有汉字都显示中文,就echarts的toolbox注释显示乱码
    【转】 JSONObject使用方法
    JSON: property "xxx" has no getter method in class "..."
    【转】Oracle数据库中Sequence的用法
    Android实例-获取程序版本号(XE10+小米2)
    Android实例-调用系统APP(XE10+小米2)
    BAT-使用BAT方法清理系统垃圾
    Android实例-全屏显示程序(XE10+小米2)(无图)
    问题-Delphi2007编译时提示内存错误“sxs.dll. No Debug Info.ACCESS 0xXXXXX"
    DelphiXE7中创建WebService(服务端+客户端)
  • 原文地址:https://www.cnblogs.com/remta/p/12090155.html
Copyright © 2011-2022 走看看