首页 > 编程语言 >【面试宝典】java基础面试题总结[上]

【面试宝典】java基础面试题总结[上]

时间:2024-08-17 21:24:58浏览次数:15  
标签:面试题 java String 对象 宝典 equals 比较 方法 final

一、Java 中有几种基本数据类型?各占多少字节?

在 Java 中基本数据类型有 8 个,占用的字节分别是整型 byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节);浮点型 float(4个字节)、double(8个字节);布尔类型 boolean; 字符类型 char (2个字节)。

二、String 类能被继承吗?为什么?

String 类不能被继承。因为 String 类被 final 修饰。final 修饰变量变量就会变成常量;final 修饰方法方法就会不可重写;final 修饰类类就不能继承;

三、String、StringBuilder、StringBuffer 的区别?

String 是只读字符串,也就是说 String 引用的字符串内容是不能被改变的。

StringBuffer/StringBuilder 类表示字符串对象可以直接修改。

StringBuffer 是线程安全的效率慢。StringBuilder 是线程不安全的效率高。

四、在多线程情况下 SimpleDateFormat 是线程安全的吗?

在多线程情况下 DateFormat 的所有实现,包括 SimpleDateFormat 都不是线程安全的。如果不在线程安全的情况下使用,在解析或者格式化日期的时候,可能会会获得一个不正确的结果。最佳的时间的多线程的情况下使用的时间工具类是 joda-time

五、equals 和 == 区别

== 比较的是变量(栈)内equals== 在Java中的主要区别体现在以下几个方面:

1、本质区别

  • equals():是定义在java.lang.Object类中的一个方法,用于比较两个对象的内容是否相等。它是一个方法,因此可以通过重写(Override)来改变其默认行为。
  • ==:是一个操作符,用于比较两个对象或基本数据类型的值是否相等。对于对象,它比较的是两个对象在内存中的地址是否相同,即是否是同一个对象的引用;对于基本数据类型,它比较的是两个值是否相等。

2、比较内容

  • equals():默认情况下,equals()方法通过==来比较两个对象的引用是否相同(即是否是同一个对象)。但是,许多类(如StringInteger等)都重写了equals()方法,以提供基于内容而非引用的比较。
  • ==:对于对象,它总是比较引用;对于基本数据类型,它比较的是值。

3、灵活性

  • equals():由于equals()是一个方法,因此它可以通过重写来提供灵活的比较逻辑。例如,在自定义类中,可以根据类的属性来定义两个对象何时被视为相等。
  • ==:其比较逻辑是固定的,无法更改。

4、 性能

  • equals():由于可能需要执行复杂的比较逻辑(特别是在重写了equals()方法的类中),因此其性能可能低于==
  • ==:仅仅比较引用或值,因此其性能通常优于equals()

5、 使用场景

  • equals():当需要比较两个对象的内容是否相等时,应使用equals()方法。特别是当比较的是自定义对象或已经重写了equals()方法的类(如StringInteger等)的实例时。
  • ==:当需要比较两个对象是否是同一个对象(即它们的引用是否相同)时,应使用==操作符。此外,对于基本数据类型的比较,也应使用==

示例

String s1 = new String("hello");
String s2 = new String("hello");

System.out.println(s1 == s2); // false,因为s1和s2虽然内容相同,但它们是两个不同的对象
System.out.println(s1.equals(s2)); // true,因为String类重写了equals()方法,以比较内容

Integer i1 = 123;
Integer i2 = 123;

System.out.println(i1 == i2); // true,对于Integer这样的包装类,在-128到127之间的值会被缓存,因此i1和i2实际上是同一个对象
System.out.println(i1.equals(i2)); // true,即使不考虑缓存,equals()方法也会比较值

在这个示例中,==用于比较String对象时返回false,因为s1s2虽然内容相同,但它们是两个不同的对象;而equals()方法返回true,因为String类重写了equals()方法以比较内容。对于Integer对象,由于Java对-128到127之间的值进行了缓存,因此i1i2实际上是同一个对象,所以==equals()都返回true。但即使不考虑缓存,equals()方法也会比较两个Integer对象的值是否相等。

六、final 有哪些用法?

  • 被 final 修饰的类不能被继承
  • 被 final 修饰的方法不能被重写
  • 被 final 修饰的变量不能被修改值
  • 被 final 修饰的方法 jvm会尝试内联 以提高运行效率
  • 被 final 修饰的常量,在编译阶段会存入常量池中

七、java 反射的作用原理

1、定义

反射机制是在运行时,对于任意一个类,都能知道这个类的所有属性和方法;对于任意个对象,都能调用它的任意一个方法。在 java 中只要给定类的名字,就可以通过反射机制来获得类的所有信息。

2、反射的实现方式

  • 使用类名的 .class 属性,例如 String.class 可以获取 String 类的 Class 对象。
  • 使用对象的 getClass() 方法,例如 "hello".getClass() 可以获取字符串对象的 Class 对象。
  • 使用 Class.forName() 方法,需要传入类的全限定名,例如 Class.forName("java.lang.String")

标签:面试题,java,String,对象,宝典,equals,比较,方法,final
From: https://blog.csdn.net/weixin_38434780/article/details/141134394

相关文章

  • JSP基于JAVAWEB医院挂号系统jep98(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,医生,护士,科室信息,预约时间段,出诊信息,预约挂号,门诊病历,医生打卡,护士打卡,就诊评价技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技......
  • JSP基于JavaWeb的CRM系统684y6程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:公告信息,部门,职位,用户,客户分组,客户信息,拜访记录,商机信息,订单信息技术要求:开发语言:JSP前端使用:HTML5,CSS,JSP动态网页技术后端使用SpringBoo......
  • 高级java每日一道面试题-2024年8月16日-设计模式篇-解释装饰者模式和代理模式的区别?
    如果有遗漏,评论区告诉我进行补充面试官:解释装饰者模式和代理模式的区别?我回答:在Java中,装饰者模式(DecoratorPattern)和代理模式(ProxyPattern)都是常用的设计模式,它们在结构上看起来有些相似,但实际上它们的目的、应用场景和实现方式存在明显的区别。下面详细解释这两种......
  • 学习Java的第七周
    第七周的学习记录来啦,历时许久终于接触到了一点课程核心,本周的学习从面向对象开始,所谓更符合人类思维习惯的、使编程更简单的Java核心……学习了获取已有对象并使用,如何让自己设计对象并使用(语法),重心更倾向于后者,这一周前一半内容主要在封装、成员和局部、构造方法、标准的javabea......
  • Java面试题--JVM大厂篇之掌控Java未来:深入剖析ZGC的低停顿垃圾回收机制
    Java面试题--JVM大厂篇之掌控Java未来:深入剖析ZGC的低停顿垃圾回收机制引言:正文:一、ZGC的核心机制1.并发标记和重定位(Relocation)2.染色指针(ColoredPointers)与读屏障(LoadBarriers)二、实际案例分析1.在线游戏服务器2.金融交易系统三、解决方案和技巧1.调整ZGC参数......
  • 2024年的Java开发怎么转型升级呢
    转型做其它行业,非IT行业。三宝。地摊。小饭店。回农村种地,自己的老家。去农村种地,租房住、租地种。自媒体创业。写作。培养其它技能,比如,写剧本、写歌曲。资金充足的话,吃利息度日也行。360行,非IT行都可以看看。 ben发布于博客园升级做高级技术,研究前沿技术。Java......
  • 每周JAVA学习汇总
    在Java学习中,字符串比较、集合、静态变量、继承与子类是几个重要的概念。以下是对这些概念的汇总:字符串比较(1)使用equals()方法:比较字符串内容是否相同,区分大小写。javaStringstr1="Hello";Stringstr2="hello";booleanresult=str1.equals(str2);//返回false(2)使......
  • Java基础——面向对象编程高级(常见关键字)
    package:用于声明一个类或接口所属的包(即命名空间)语法格式:package顶层包名.子包名OrderController类属于包com.hxzs.order.controller一个源文件只能有一个声明包的package语句package语句作为Java源文件的第一条语句出现。若缺省该语句,则指定为无名包。包名,属于标识符,满......
  • Java超市收银系统(八、数据导入)
    引言        当选择1时,程序读取“商品信息.xls”文件,将所有数据存放于product集合中,然后将集合中的所有数据增加到商品表中,增加的时候要检查每条记录的条形码在商品表中是否存在,若存在,则不需要增加到数据库中,所有数据增加完毕后,显示“成功从excel文件导入XXX条商品......
  • idea JAVA_OPTS改不了
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......