Java基础面试题1

Java基础

Java特点

* 平台无关性,可以在任何安装了jvm的系统上运行

* 面向对象:Java是一门严格的面向对象编程语言,几乎一切都是对象

* 内存管理:自动管理内存、回收不使用的对象

什么是jvm

java虚拟机,解释字节码并映射到本地CPU指令集和OS的系统调用

JVM屏蔽了与操作系统平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可在多种平台上不加修改的运行,这也是Java能够"**一次编译,到处运行的**"原因

Java为什么是跨平台的

编写的Java源码,编译后会生成一种 .class字节码文件。跨平台的是Java程序,不是JVM,JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM,Java虚拟机(JVM)就是负责将字节码文件翻译成特定平台下的机器码然后运行。

JVM、JDK、JRE三者关系

* JVM是Java虚拟机,是Java程序运行的环境。它负责将Java字节码(由Java编译器生成)解释或编译成机器码,并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能,使得Java程序具备跨平台性。

* JDK是Java开发工具包,是开发Java程序所需的工具集合。它包含了JVM、编译器(javac)、调试器(jdb)等开发工具,以及一系列的类库(如Java标准库和开发工具库)。JDK提供了开发、编译、调试和运行Java程序所需的全部工具和环境。

* JRE是Java运行时环境,是Java程序运行所需的最小环境。它包含了JVM和一组Java类库,用于支持Java程序的执行。JRE不包含开发工具,只提供Java程序运行所需的运行环境。

值传递和引用传递区别☆

Java只有值传递,不存在真正的引用传递。

值传递(Pass by Value),传递的是值的副本,适用于基本数据类型(如 int、char 等),修改方法内的参数副本,不会影响原变量的值。

引用类型传递 "引用的副本",通过副本可修改对象内容,但无法改变原引用的指向

数据类型(数据类型、bigDecimal、自动拆装箱的方法、128陷阱)

八种基本数据类型和三种引用数据类型

基本数据类型:

* 数值型:整数类型(byte、short、int、long)和浮点类型(float、double)

* 字符型:char

* 布尔型:boolean

引用数据类型:

类、接口、数组

注意:

* java八种基本数据类型的字节数:1字节(byte、boolean)、 2字节(short、char)、4字节(int、float)、8字节(long、double)

* 浮点数的默认类型为double(如果需要声明一个常量为float型,则必须要在末尾加上f或F)

* 整数的默认类型为int(声明Long型在末尾加上l或者L)

* 八种基本数据类型的包装类:除了char的是Character、int类型的是Integer,其他都是首字母大写

* char类型是无符号的,不能为负,所以是0开始的

<br />

long可以和int类型相互转化吗

可以由小变大,int到long直接赋值或强制类型转换,long到int强制类型转换,但容易数据丢失或溢出

<br />

数据类型转换方式

自动类型转换(隐式转换)、强制类型转换(显式转换)、字符串转换、数值间转换

<br />

类型互转会出现的问题

基本数据类型转换:小转大自动转换,大转小

对象引用转换:向上转型(多态,父类引用指向子类对象),不允许向下兼容,手动转换

<br />

为什么用bigDecimal不用double

double会出现精度丢失的问题,double执行的是二进制浮点运算,二进制有些情况下不能准确的表示一个小数,创建BigDecimal对象时,使用字符串作为参数,而不是直接使用浮点数值,可以避免浮点数精度丢失

自动拆装箱实现

装箱,调用integer(包装类)的valueof()方法,拆箱调用intvalue()方法

自动拆装箱128陷阱

Java的Integer类内部实现了一个静态缓存池,用于存储特定范围内的整数值对应的Integer对象。\

默认情况下,这个范围是-128至127(可以自己调,不作为面试重点,自己了解)。当通过Integer.valueOf(int)方法创建一个在这个范围内的整数对象时,并不会每次都生成新的对象实例,而是复用缓存中的现有对象,会直接从内存中取出,不需要新建一个对象。

![1.00](https://tc-cdn.processon.com/po/69855c375776f60d257c5007-69afb5924188e84da43ebc08)

127+1=-128

在 8 位有符号整数的补码编码规则下,最大值 127(二进制 0111 1111)加 1 后溢出为 1000 0000,而该二进制值在补码中被规定表示 - 128

相关推荐
代码雕刻家15 小时前
3.5.Maven-依赖管理-依赖配置&依赖传递
java·maven
!chen15 小时前
MyBatis-plus拓展之字段类型处理器、自动填充和乐观锁
java·tomcat·mybatis
Jin、yz16 小时前
JAVA 八股
java·开发语言
va学弟16 小时前
Java 网络通信编程(6):视频通话
java·服务器·网络·音视频
pjw1988090316 小时前
Spring Framework 中文官方文档
java·后端·spring
jgyzl17 小时前
2026.3.11MyBatis-Plus基本使用与思考
java·数据库·mybatis
Full Stack Developme18 小时前
Java 常用通信协议及对应的框架
java·开发语言
( •̀∀•́ )92018 小时前
Spring Boot 启动报错 `BindException: Permission denied`
java·spring boot·后端
杰克尼18 小时前
苍穹外卖--day10
java·数据库·spring boot·mybatis·notepad++
sjmaysee18 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat