java面试题4

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/strivenoend/article/details/84728253

1.在 jdk1.5 中,引入了泛型,泛型的存在是用来解决什么问题

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,能够解决代码复用的问题。常见的一种情况是,你有一个函数,它带有一个参数,参数类型是A,然而当参数类型改变成B的时候,你不得不复制这个函数。除此之外泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,消除显示的类型强制转换,以提高代码的重用率。
使用方法:
public class Stack<T>{
        private T[] m_item;
        public T Pop(){...}
        public void Push(T item){...}
        public Stack(int i)
        {
            this.m_item = new T[i];
        }
}
类的写法不变,只是引入了通用数据类型T就可以适用于任何数据类型,并且类型安全的。这个类的调用方法:

//实例化只能保存int类型的类
Stack<int> a = new Stack<int>(100);
      a.Push(10);
      a.Push("8888"); //这一行编译不通过,因为类a只接收int类型的数据
      int x = a.Pop();
 
//实例化只能保存string类型的类
Stack<string> b = new Stack<string>(100);
      b.Push(10);    //这一行编译不通过,因为类b只接收string类型的数据
      b.Push("8888");
      string y = b.Pop();
2.这样的 a.hashcode() 有什么用,与 a.equals(b)有什么关系

  hashcode()方法提供了对象的hashCode值,是一个native方法,返回的默认值与System.identityHashCode(obj)一致。通常这个值是对象头部的一部分二进制位组成的数字,具有一定的标识对象的意义存在,但绝不定于地址。
    作用是:用一个数字来标识对象。比如在HashMap、HashSet等类似的集合类中,如果用某个对象本身作为Key,即要基于这个对象实现Hash的写入和查找,那么对象本身如何实现这个呢?就是基于hashcode这样一个数字来完成的,只有数字才能完成计算和对比操作。
    equals与hashcode的关系:equals相等的两个对象,则重写后的hashcode一定要相等。但是hashcode相等的两个对象equals不一定相等。
3.深拷贝和浅拷贝区别

  ● 浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间。
  ● 深拷贝(.clone())不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

猜你喜欢

转载自blog.csdn.net/strivenoend/article/details/84728253