Java基础(必知必会)常见面试题

Java基础阶段常见面试题汇总

  1. java的八种基本数据类型是什么?
    byte:字节型,用于存储整数,占用 1 个字节,范围 -128 ~ 127,默认值是 0
    
    short:短整型,用于存储整数,占用 2 个字节,范围 -32768 ~ 32767,默认值是 0
    
    int:整型,用于存储整数,占用 4 个字节,范围 -2^31 ~ 2^31-1,默认值是 0
    
    long:长整型,用于存储较大的整数,占用 8 个字节,范围 -2^63 ~ 2^63-1,默认值是 0L
    
    float: 单精度浮点数,用于存储小数,占用 4 个字节,不能表示精确的值,默认值是 0.0F
    
    double:双精度浮点数,用于存储小数,占用 8 个字节,不能表示精确的值,默认值是 0.0D
    
    boolean:布尔型,用于存储 true 和 false,占用 1 个字节,默认值是 false
    
    char:字符型,采用 Unicode 字符集编码,用于存储单个字符,占用 2 个字节,范围 0 ~ 65535
  2. switch能作用在哪些类型的变量上?
    可以作用于:byte,short,int,char,String,枚举类型,其它类型都是不允许的
  3. 重写与重载的区别?
    重写:发生在父子类中,方法名相同,参数列表相同
         --当派生类觉得超类的行为不好时,可以通过重写来修改超类中的方法
    重载:发生在同一类中,方法名相同,参数列表不同
         --是完全不同的方法,只是正好方法名相同而已

  4. 实例变量与静态变量的区别?
      1)实例变量:属于对象的,在创建对象时存储在堆中,创建了多少个对象,则实例变量就会在堆中存储几份,需要通过引用打点来访问
      2)静态变量:属于类的,在类被加载时存储在方法区中,无论创建了多少个对象,静态变量在内存中都只有一份,常常通过类名打点来访问
  5. java是值传递还是引用传?
    java中无论是基本类型还是引用类型,都是值传递
        1)对于基本类型而言,传递的是具体的值的副本
        2)对于引用类型而言,传递的是具体的地址的副本
  6. String str = new String("abc"); 创建了几个字符串对象?
    答:2个
      第一个:字面量"hello"
        ---java会创建一个String对象表示字面量"hello",并将其存入常量池
      第二个:new String()
        ---new String()时会再创建一个字符串对象,并引用hello字符串的内容
  7. ==和equals()的区别
    1.  ==若为基本类型则比较的是具体的值是否相同
      short s1 = 1; long l1 = 1;
      
      // 结果:true。类型不同,但是值相同
      
      System.out.println(s1 == l1);
    2. ==若为引用类型则比较的是引用的地址是否相同

      Integer i1 = new Integer(1);
      
      Integer i2 = new Integer(1);
      
      // 结果:false。通过new创建,在内存中指向两个不同的对象
      
      System.out.println(i1 == i2);
    3. equals()是在Object类中定义的,内部比较的还是引用的地址是否相同, 但是比较地址没有参考意义, 所以常常需要去重写equals()来比较对象的数据是否相同. Java中的String中已经重写了equals()来 比较字符串的内容是否相同

      ​Integer i1 = new Integer(1);
      
      Integer i2 = new Integer(1);
      
      // 结果:true。两个不同的对象,但是具有相同的值
      
      System.out.println(i1.equals(i2));
      
       
      // Integer的equals重写方法
      
      public boolean equals(Object obj) {
      
          if (obj instanceof Integer) {
      
              // 比较对象中保存的值是否相同
      
              return value == ((Integer)obj).intValue();
      
          }
      
          return false;
      
      }
  8. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?
    不对。hashCode() 和 equals() 之间的关系如下:
    
    当有 a.equals(b) == true 时,则 a.hashCode() == b.hashCode() 必然成立,
    
    反过来,当 a.hashCode() == b.hashCode() 时,a.equals(b) 不一定为 true。
  9. String和StringBuilder、StringBuffer的区别?
    String:String 的值被创建后不能修改,任何对 String 的修改都会引发新的 String 对象的生成。
    
    StringBuffer:跟 String 类似,但是值可以被修改,使用 synchronized 来保证线程安全,是同步处理的,性能稍慢。
    
    StringBuilder:StringBuffer 的非线程安全版本,没有使用 synchronized,是并发处理的,具有更高的性能,推荐优先使用。


        本文完!

        写在结尾:

        2022 年 9 月 24 日 一个java菜鸟,发布于北京海淀。

        好记性不如烂笔头,持续学习,坚持输出~今天是持续写作的第5天。可以点赞、评论、收藏啦。


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值