Java基础

1. JDK和JRE有什么区别?

JDK是java的开发工具包,而JRE是java的运行时环境,开发工具包中包含运行时环境。对于安装软件来说,理论上只需要JRE,但一般都一起安装。而JRE是由JVM和一些标准类库组成。java跨平台的实现,主要是通过JVM负责将字节码翻译成底层文件,相当于自带适配器。

2. == 和 equals的区别

==对于基本数据类型来说,也即(char,byte,boolean,short,int,long,float,double),==这种关系运算服意思是值是否相等。而对于String等对象类型的数据,==判断值判断引用是否相等,而不判断内容。equals是超类Object的方法,默认情况下是比较引用是否相等。但是实际使用中,我们需要知道两个对象的内容是否相等,所以一般equals是用来判断内容是否相等。所以String类中写了equals方法,如果我们要对其他类型的变量比较内容的话,需要重写equals方法。

equals方法有自反性,交换性等属性,如果equals相等,那么其hashCode应该也相等。

参考资料:码农小汪-java中hashCode方法与equals方法_11544106的技术博客_51CTO博客

3. 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不一定,因为hashCode本质上是一种哈希算法,存在哈希碰撞的可能,所以即便是一样的hashCode,也可能是不一样的值生成的。但是反之如果对象equals,那么hashCode一定相同。那么如果存在哈希碰撞的话,要怎么解决,第一个是用一个链表,把相同哈希值的数据存到一个链表里面,参考Java7之前的HashMap实现。或者可以对已经hashCode过的值再hash,直到其不会重复。

引申理解:为什么我们平时工作中不会用到重写equals和hashcode方法?因为我们平时的工作中在往java集合里添加key值的时候,往往不会put对象进去,而是数字或字符串。这些已经重写好了equals和hashcode方法。我们也不经常需要判断两个对象是否相等,我们一般都会对数据加主键或唯一标识来区对象。

什么时候我们需要重写equals和hashcode方法,即在我们需要判断两个对象是不是同一个的时候。其中equals用来比较内容是不是一样,他需要判断对象参与唯一性计算的所有字段都相等。而hashcode方法则用于在java的哈希表操作的时候,用来看两个对象是不是同一个(避免equals的复杂操作,相当于给对象一个唯一标识),需要参与equals计算的所有字段都参与hashcode计算。一般方法是用变量result(初始设置一个小整数)乘以31,然后再加上每个字段的hashcode值,作为result。继续进行下一个字段操作,直到获得了result字段结果作为hashcode值。可以参考String的hashcode方法。

4. final 在 java 中有什么作用?

final用来形容类,表示类不可被继承,final修饰方法则方法不能被子类重写,final用来形容变量,表示变量的引用或值(基本类型)不能被修改,所以需要在声明时就初始化完成。例子是String类就是final的,不能被继承,没有String子类存在。另外,对于抽象类不能用final来修饰,因为抽象类本身就是提供给子类继承的,而final又不能被继承,所以冲突了。

不过final在修饰引用类型的变量时没有什么意义,就好像数组或对象类型的变量,虽然其引用不可变化,但是引用指向的对象内容还是可以改变的,所以修饰为final并不能起到约束作用。

5. java 中的 Math.round(-1.5) 等于多少?

相当于对-1.5进行四舍五入,画一个数轴,入,则往大的方向上入,因此是-1.

6. String 属于基础的数据类型吗?

不属于基础数据类型,它实现了CharSequence接口,表示字符数组。当然,因为String类型应用十分广泛,所以java设置了这一引用类型数据,而且为了方便使用和安全角度考虑,String是final的不能被继承,String可以直接用字符串方式表示,且jvm会维护字符串常量池。可以像基本数据类型一样使用它,但是它确实是引用类型。String是不可变的,如果想要可变的话,那么需要使用StringBuilder或StringBuffer。

7. java 中操作字符串都有哪些类?它们之间有什么区别?

String,StringBuffer,StringBuilder。String是不可变的字符串,StringBuilder是可变的字符串,它通过append方法来为字符串追加内容,也可以指定下标在中间插入。他不是线程安全的类,多线程环境下需要使用StringBuffer类,这个类的操作方法上都添加了synchronized关键词加锁。但是加锁会增加开销,单线程环境下不要使用。

8.  String str="i"与 String str=new String("i")一样吗?

不一样,equals是一样的,hashCode也是一样的,可能在内存中实际存储的地址也是一样的,但是存放这两个引用类型变量的值是不一样的,==操作将会返回false。因为new String是重新创建一个引用类型变量引用字符串i的,这个新的引用类型变量与原来的是不相等的。

9. 如何将字符串反转?

java中,将字符串翻转,有几种方式,倒序遍历字符串,取出每个位置的字符然后重新拼接(StringBuilder);或者通过toCharArray获取字符数组,然后倒序遍历输出;或者通过将字符串传入StringBuilder类中,然后调用reverse在toString,翻转字符串。

10. String 类的常用方法都有那些?

equals比较是否相等,

substring截取字符串(返回新的字符串),

split分割字符串输出字符串数组,

toCharArray作为字符数组输出,

charAt某字符在字符串中的位置,

indexOf指定下标下的字符,

length字符长度方法,

startsWith字符串是否以XXX开头,

endsWith字符串是否以xxx结尾,

toUpperCase字符串转大写,

toLowerCase字符串转小写,

contains是否包含指定字符串,

replace替换字符串中的字符

11. 抽象类必须要有抽象方法吗?

抽象类不一定要有抽象方法,但是有抽象方法的,必须是抽象类。

12. 普通类和抽象类有哪些区别?

普通类不能有抽象方法,抽象类可以有抽象方法;普通类可以是final的,抽象类不能是final的;抽象类不能被实例化,注定被继承,所以抽象方法也不能是private,也不能是final的。职责上属于继承体系中较为上层的部分,它承担一些公共的职责较多。

13. 抽象类能使用 final 修饰吗?

不能,final意味着不能被继承,但是抽象类生来就是要被继承的,否则其中的抽象方法就会得不到实现。虽然抽象类不一定要有抽象方法,但是语法上java还是禁止了这种情况。

自整理Java面试题集锦(Java基础 1)相关推荐

  1. Java面试题集锦(含答案)

    Java面试题集锦 Java基础 1.ArrayList.Vector和LinkedList有什么区别? 答:ArrayList底层实现是数组,查找快,增删慢,线程不安全 Vector 和ArrayL ...

  2. [转载] Java笔试题集锦

    参考链接: 关于Java中文件名和类名的误解 Java笔试题集锦 1.MVC的各个部分都有那些技术来实现?如何实现? 答:MVC是Model-View-Controller的简写."Mode ...

  3. 2016最新Java笔试题集锦

    更新时间:2015-08-13         来源:网络投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文"2016最新Java笔试题集锦",供大家阅读参考 ...

  4. 狂神Java面试题总结:基础及语法169道

    狂神Java面试题总结:基础及语法169道 收集整理:秦疆 联系方式QQ:24736743 微信:qinlvejiang 答案来源收集与互联网,部分内容经供参考,代码全部为手写验证通过. 1~20 1 ...

  5. JAVA面试题之JVM基础知识

    JAVA面试题总结-JVM的基础知识 JAVA面试题之JVM基础知识 说一下JVM的主要组成部分及作用 说一下 jvm 运行时数据区? 说一下堆和栈的区别? 队列和栈是什么?有什么区别? 什么是双亲委 ...

  6. java面试题纠错——java基础

    java面试题纠错--java基础

  7. Java序列化机制原理,java面试题,java基础笔试题,BAT

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. Ja ...

  8. java char 计算_经典Java面试题之Java中Char类型的运算

    经典Java面试题之Java中Char类型的运算 char在java中称为"字符型",占2个字节.本文是百分网小编搜索整理的关于经典Java面试题之Java中Char类型的运算,有 ...

  9. java面试题27 java中下面哪些是Object类的方法()

    java面试题27 java中下面哪些是Object类的方法() A notify() B notifyAll() C sleep() D wait() 蒙蔽树上蒙蔽果,蒙蔽树下你和我.遇到这种题,我 ...

  10. (免费领取Java面试题)Java面试中经常被问到的问题

    (免费领取Java面试题)Java面试中经常被问到的问题 免费领取Java面试题 -------------https://blog.csdn.net/kaikeba/article/details/ ...

最新文章

  1. java 子类重写父类的方法应注意的问题
  2. 22.25在计算机中如何储存,浮点数在计算机中存储方式
  3. 全局样式_CAD新手福利:不懂标注样式修改的请进来一看
  4. php函数内调用类的变量,php - 如何调用一个类变量的闭包?
  5. Go 语言学习笔记(一):基础知识
  6. 操作系统——缓冲区溢出
  7. python数据分析师书籍_如何自学成为数据分析师
  8. 【双路E5装机】2016.7.31整机升级计划
  9. 基于文字识别与情感语义分析的(熊猫头)Emoji表情包搜索神器 —— 可以识别本地表情包或者爬取网络表情包
  10. 公钥基础设施PKI体系介绍
  11. win7显示文件的扩展名
  12. macOS - 安装 swig 、PCRE
  13. PTA L2-003 月饼
  14. 查询天气的接口api收集总结
  15. Android开发——菜单(Menu)-——上下文菜单(ContextMenu)、 弹出菜单(PopupMenu)
  16. ContentControl模型
  17. Fass timeout detection implementation
  18. nginx lingering_close
  19. matlab有shapely包吗,python binary lib on win/各种python库的二进制包
  20. 结合SNS和WEB2.0 爱情公寓探索新模式

热门文章

  1. 为macbook双系统的windows装驱动
  2. Mybatis源码学习-MapperMethod
  3. matplotlib.pyplot——cmap直观理解
  4. Windows平台搭建Mantis服务器
  5. 提高电脑运行速度--关闭电脑无用服务
  6. 学生学籍管理系统_登陆界面设计
  7. 中介/代理,正/反向代理,直/间接代理,概念清晰解释
  8. 自定义dns服务器是什么,dns是什么意思?dns怎么设置(手动设置/软件设置)
  9. 智能时代怎么能少了老年人
  10. 我的世界服务器显示你没有权限,我的世界怎么没有权限有指令