• java字符串与基础混淆


      java字符串是一个类,是java虚拟机在启动的时候会实例化9个对象池,其中9个对象池分别用来存储8种基本数据类型(int,float,double,byte,boolean,short,long,char)的包装类和String对象。

      Java String创建对象有两种方式,其中一种是通过直接创建:String str1="Stringhello",另外一种是通过构造函数:String str2=new String("stringhello");前者是通过在对象池里面取对象,后者是直接生成的一个对象。String str3="111";  String str4="111"; system.out.println(str3==str4);==>>输出为:true.这是因为str3和str4都是通过对象池获取,然而通过String str5=new String("111");system.out.println(str3==str5);==>>输出为:false.这是因为str3是通过对象池获取,而str5是直接创建,故而性质不同;

      == :这种比较方法引用性质要相同才是true,而equal()方法则只需要值相同即可。

    String与StringBuffer的区别

    * 对String类来说,它实现了父类的equals方法,比较的是字符串值的大小;而StringBuffer则不一样,它并没有实现equals方法,
    * 而是将俩个引用直接比较,所以sb.equals(tb)输出false。hashcode()方法也是一个道理。
    * 特别要说的是, 一个类的equals方法和hashcode方法必须一致,例如:x.equals(y)为true;那么x.hashcode()和y.hashcode()就必须相同。

    String类标示内容不可以改变的字符串,StringBuffer类标示内容可以被修改的字符串。

    String覆盖了equals方法和hashCode方法,二StringBuffer没有覆盖equals方法和hashCode方法;

    String s="abc";
    String t=new String("abc");
    System.out.println(s==t); false
    System.out.println(s.equals(t));true
    System.out.println(s.hashCode()==t.hashCode());true

    StringBuffer sb=new StringBuffer("abc");
    StringBuffer tb=new StringBuffer("abc");
    System.out.println(sb==tb);false
    System.out.println(sb.equals(tb));false
    System.out.println(sb.hashCode()==tb.hashCode());false

    final、finally与finalize的区别

    final用于声明属性,方法和类,分别表示属性不可变方法不可覆盖类不可继承。内部类要访问局部变量,局部变量必须定义final类型。

    finally是异常处理语句结构的一部分表示总是执行。

    finalize是Object类的一个方法,在垃圾收集器执行的时候回调用被回收对象的此方法。

  • 相关阅读:
    opencv如何载入内存中的图像文件
    C++ 中指针与引用的区别
    2014新版12306接口分析
    Qt 多线程与数据库操作需要注意的几点问题
    设置 Linux 的 LD_LIBRARY_PATH 变量
    linux+Qt程序如何打包发布
    c++(重载、覆盖、隐藏)
    Pytorch中的强化学习
    WordNet简介
    Pytorch中的数学函数
  • 原文地址:https://www.cnblogs.com/cqyy/p/7274985.html
Copyright © 2020-2023  润新知