java 经典基础面试题

1、==和equals的区别

“等等”既可以比较基本数据类型也可以比较引用数据类型,基本数据是比较的值,而引用数据类型比较的是内存地址,equals要看是否被重写,如果没有被重写则是,如果重写了只可以比较引用数据类型,比较的是值。
为什么用eclipse复写hashCode方法,有31这个数字?
任何数n * 31就可以被JVM优化为 (n << 5) -n,移位和减法的操作效率要比 乘法的操作效率高的多,对左移虚拟机里面都有做相关优化,并且31只占用 5bits!

2、谈谈你对java.io.Serializable接口的理解,我们知道它用于序列化,是空方法接口,还有其它认识吗?

  1、分布式环境里面Entity 会写一个implements serializable。 	
 2、进行数据传参的时候补偿操作系统之间的差异。 	
 3、 在定义架构类型抽取的时候把传参类型定义的足够的高,传serializable
同时可以兼容多种数据类型。

3、String 的理解
常量找池,变量(+)找堆 ,变量如果是2个字符串的拼接则找优化成池

   String s4 = "java";
  String s5 = "ja";
  String s6 = "va";
  //常量找池,变量(+)找堆
  System.out.println(s4 == "java");
  System.out.println(s4 == (s5+s6));
  System.out.println(s4 == "ja"+s6);
T f f

4、String、StringBuffer、StringBuilder之间的区别

这里是引用
String 是字符常量
StringBuffer 是字符变量 线程安全
Stringbuilder 是字符变量 线程不安全、效率最高

5、int 和integer 的区别

1、Integer是int提供的封装类,而int是Java的基本数据类型;
2、Integer默认值是null,而int默认值是0;
3、声明为Integer的变量需要实例化,而声明为int的变量不需要实例化;
4、Integer是对象,用一个引用指向这个对象,而int是基本类型,直接存储数值
①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
③两个都是new出来的,都为false
④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

6、sleep() 和 wait() 有什么区别?

sleep()是静态方法是线程调用 。。。。 wait(),是对象调用

sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)"醒来"的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

猜你喜欢

转载自blog.csdn.net/weixin_42188064/article/details/82936544