java 经典基础面试题

本文深入探讨了Java中的核心概念,包括equals与==的区别、Serializable接口的使用、String内部机制、StringBuffer与StringBuilder的对比、Integer与int的差异、以及sleep()与wait()的不同。通过详细解释这些关键知识点,帮助读者更好地理解和掌握Java编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值