zoukankan      html  css  js  c++  java
  • FQA 之java 基础

    1.修改 java 中getter 返回的Integer 对象变量会修改对象中对应的Integer 变量吗?

    public class Test{
        private Integer i;
        public Integer getI(){
            return i;
        }
        public static void main(String[] args){
            Test t=new Test();
            Integer other_i=t.getI();
            other_i=10;
            System.out.println(t.getI());
            
        }
    }
    View Code

     结果打印出来的是null.个人感觉应该是返回10,而不是之前i 的值.

    感觉很奇怪,难道getI() 返回的不是引用变量i 的值吗?而引用变量i 的值就是一个Integer 对象的指引.

    这样other_i 和i 都指向同一个对象,所以修改other_i 也可以修改到i 指向的对象才对啊.

    那为什么结果输出却不是呢?和Integer 是包装类有关吗?

     查询资料得知,原来Integer 包装类对象是不可变的,和String 类型类似.所以这个就是原因.

    参考:<核心>P188,5.4 节对象包装器与自动包装

    2.为什么修改覆盖了equals()方法,就需要重定义hashCode() 方法呢?

      java 设计的原则之一:两个对象如果相等(通过equals() 判断) 则他们的hashCode() 返回的hash code 也必须相等. 

      注意:hash code 相等的对象不一定相等.

      有个更加直观的例子:参考<head first java> P560

      hashSet 在添加对象时,先判断对象的hash code 在hashSet 中存不存在,如果不存在,则认为没有相同的对象存在,再根据hash code 的值将对象添加到相应的位置.

      如果存在相同的hash code ,则通过hash code 定位所有具有相同hash code 值的对象,再判断equals 是否相等,如果再次相等则认为对象已存在,不再加入hashSet 中.

      问题是:为什么java 这样设计呢?对象相等则必须有equals 和hashCode 相等呢?

      或许是:采用了hash table结构来快速存取数据,所以用到需要hash code.

      

    3.如果一个类继承的父类和接口都有一个相同的方法,则在类中实现的方法是继承?实现接口?还是不需要实现?

    4.静态方法在读写不同的文件时会有线程安全的问题吗

    5.泛型  public  void save(Object<? extends Object> obj);或者  public  <T extends Object> void save( Object<T> obj); 这两个方法是一样的.只是表示的方式不一样.

      问题是为什么都报这样的错误? 这个方法会报错:The type Object is not generic; it cannot be parameterized with arguments <? extends Object>

      这种形式的泛型使用方法只能用在集合上?  public  <T extends Object> void save( List<T> list); 这个方法是正确的.

  • 相关阅读:
    代码结构
    linux 启动盘制作multisystem
    cmake 各种语法的作用
    leetcode Longest Consecutive Sequence
    leetcode find kth
    leetcode twoSum
    S3pool pytorch
    数学:优化:拉格朗日乘子法
    Fisher判别分析(线性判别分析——LDA)
    数学:优化:牛顿法
  • 原文地址:https://www.cnblogs.com/predisw/p/4731550.html
Copyright © 2011-2022 走看看