java基本类型知识点与面试题

本文深入探讨Java中的自动类型转换与强制类型转换,解释基本类型与包装类的区别,包括short类型变量的加法操作、char类型存储汉字的能力、Integer与int的区别、switch语句的适用类型、double到long的赋值、浮点数的精度问题、double与float类型的赋值,以及==运算符在不同数据类型间的比较。

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

总结:

1.自动类型转换:编译器自动完成类型转换,不需要在程序中编写代码。

   强制类型转换:强制编译器进行类型转换,必须在程序中编写代码。

2.基本类型和包装类的区别

(1)问:如下程序语句有什么问题吗?

short s1 =1;

s1 = s1 +1;    
//1
short s2 =1;

s2 +=1;    
//2

答:对于注释 1 来说,在 s1+1 运算时会自动提升表达式的类型为 int,所以将 int 赋予给 short 类型的变量 s1 会出现类型转换错误(无法编译,IDE 提示错误),除非主动加上强转。对于注释 2 来说 += 是 java 语法规定的运算符,所以 java 编译器会对它进行转换特殊处理,故可以正确编译执行。

(2)问:java 中 char 类型变量能不能储存一个中文的汉字,为什么?

答:java 的 char 类型变量是用来储存 Unicode 编码字符的,Unicode 字符集包含了汉字,所以 char 类型自然就能存储汉字,但是在某些特殊情况下某个生僻汉字可能没有包含在 Unicode 编码字符集中,这种情况下 char 类型就不能存储该生僻汉字了。

(3)问:java 的 Integer 和 int 有什么区别?

答:int 是 java 内置基本数据类型之一,java 为每个基本类型都提供了一个封装类,Integer 就是 int 的封装类(也叫包装类型);int 变量的默认值为 0,Integer 变量的默认值为 null,所以 Integer 可以区分出未赋值和值为 0 的区别;Integer 类内部提供了一些关于整数操作的方法,例如上文用到的表示整数的最大值和最小值。

(4)问:java 的 switch 语句能否作用在 byte 类型变量上,能否作用在 long 类型变量上,能否作用在 String 类型变量上?

答:由于 byte 的存储范围小于 int,可以向 int 类型进行隐式转换,所以 switch 可以作用在 byte 类型变量上;由于 long 的存储范围大于 int,不能向 int 进行隐式转换,只能强制转换,所以 switch 不可以作用在 long 类型变量上;对于 String 类型变量在 Java 1.7 版本之前不可以,1.7 版本之后是可以的。

(5)问:能否在不进行强制转换的情况下将一个 double 值赋值给 long 类型的变量?

答:不行,我们不能在没有强制类型转换的前提下将一个 double 值赋值给 long 类型的变量,因为 double 类型的范围比 long 类型更广,所以必须要进行强制转换。

(6)问:java 中 3*0.1 == 0.3 将会返回什么?true 还是 false?

答:false,因为浮点数不能完全精确的表示出来,一般都会损失精度。

(7)问:java 中 float f = 3.4; 是否正确?

答:不正确,3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f = (float)3.4; 或者写成 float f = 3.4F; 才可以。

(8)按照代码顺序执行,下面哪两个变量使用 == 判断返回为flase

int a = 3;

Integer b = 3;

Integer c = Integer.valueOf("3");

Integer d = new Integer(3);

c==d 返回flase 因为在定义c的时候内存中没有Integer(3)的存在,根据Integer.valueOf的源码看,他是会重新创建一个新对象

然后定义d的时候又重新创建了一个对象,所以是两个不同的对象。

其他对比都属于数值对比,会自动拆装箱。
--------------------- 
作者:Java后端技术 
来源:优快云 
原文:https://blog.youkuaiyun.com/bntx2jsqfehy7/article/details/78246071 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值