乐趣区

关于springboot:面试1v1实景模拟Java数据类型面试你踩过的坑还少吗赶紧收藏吧

明天和大家聊一下最最最根底的吧,尽管简略,但坑无处不在,会则坚固,不会牢记,面试不能惨死于这些最根底的知识点上~


老面👴:什么是根底类型与援用类型?有什么区别?

笑小枫🍁:根底类型只示意简略的字符或数字,援用类型能够是任何简单的数据结构。

区别:

  1. 存储形式不同,根本类型是存储在栈内存;援用类型变量是寄存在堆内存中,栈中寄存的是变量寄存的内存地址。
  2. 传递形式不同,根本变量类型是值传递;援用变量类型是援用传递。

老面👴:String 是根底的数据类型吗?

笑小枫🍁:不是,是援用类型。String 数据存储是 private final char value[]; 所以 String 类是不可变的,对 String 类的任何扭转,都是返回一个新的 String 类对象。


老面👴:JAVA 有几种根底数据类型?对应的包装类是什么?

笑小枫🍁:八种

根本数据类型:int,double,long,float,short,byte,char,boolean

对应的封装类型是:Integer,Double,Long,Float,Short,Byte,Character,Boolean


老面👴:什么是主动装箱与拆箱?

笑小枫🍁:

装箱:将根本类型用它们对应的援用类型包装起来;

拆箱:将包装类型转换为根本数据类型。


老面👴:int 和 Integer 哪个会占用更多的内存?

笑小枫🍁:Integer 对象会占用更多的内存。Integer 是一个对象,须要存储对象的信息。然而 int 是一个原始类型的数据,所以占用的空间更少。

32 位机器下,Integer 占用的内存状况如下:


老面👴:i64 位 JVM 中,int 的长度是多少位?

笑小枫🍁:Java 中,int 类型变量的长度是一个固定值,与平台无关,都是 32 位。意思就是说,在 32 位和 64 位的 Java 虚拟机中,int 类型的长度是雷同的。


老面👴:i 怎么将 byte 转换为 String?

笑小枫🍁:能够应用 String 接管 byte[]参数的结构器来进行转换,须要留神的点是要应用的正确的编码,否则会应用平台默认编码,这个编码可能跟原来的编码雷同,也可能不同。


老面👴:i 咱们能将 int 强制转换为 byte 类型的变量吗?

笑小枫🍁:是的,咱们能够做强制转换,然而 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果强制转化时,int 类型的高 24 位将会被抛弃,byte 类型的范畴是从 -128 到 127。


老面👴:ibyte 类型 127+ 1 等于多少?

笑小枫🍁:如果后果是 byte 类型,答案是:-128。

如果后果转为 int 类型,答案是:128。

解析:

byte 的范畴是 -128~127。

字节长度为 8 位,最右边的是符号位,而 127 的二进制为 01111111,所以执行 + 1 操作时,01111111 变为 10000000。

大家晓得,计算机中存储正数,存的是补码的兴衰。右边第一位为符号位。

那么正数的补码转换成十进制如下:

一个数如果为正,则它的原码、反码、补码雷同;一个负数的补码,将其转化为十进制,能够间接转换。

已知一个正数的补码,将其转换为十进制数,步骤如下:

  1. 先对各位取反;
  2. 将其转换为十进制数;
  3. 加上负号,再减去 1;

例如 10000000,最高位是 1,是正数,对各位取反得 01111111,转换为十进制就是 127,加上负号得 -127,再减去 1 得 -128;


老面👴:ifloat 和 double 的区别是什么?

笑小枫🍁:

  1. 内存中占有的字节数不同

单精度浮点数在内存中占有 4 个字节;

双精度浮点数在内存中占有 8 个字节;

  1. 有效数字位数不同

单精度浮点数有效数字 8 位;

双精度浮点数有效数字 16 位;

  1. 数值取值范畴不同

单精度浮点数的示意范畴:-3.40E+38~3.40E+38

双精度浮点数的示意范畴:-1.79E+308~-1.79E+308

  1. 在程序中处理速度不同

一般来说,CPU 解决单精度浮点数的速度比双精度浮点数的速度快

如果不申明,默认小数是 double 类型,如果想用 float,要进行强转;


老面👴:i 能在不进行强制转换的状况下将 double 值赋值给 long 类型的变量吗?

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


老面👴:i3*0.1==0.3 将会返回什么?

笑小枫🍁:返回 false,因为浮点数不能齐全准确的示意进去,个别会损失精度。


老面👴:ifloat f = 3.4; 是否正确?

笑小枫🍁:不正确。3.4 是双精度数,将双精度型 (double) 赋值给浮点型 (float) 属于下转型 (down-casting,也称为窄化) 会造成精度损失,因而须要强制类型转换floatf=(float)3.4; 或者写成floatf=3.4F;


老面👴:ishort s1 = 1; s1 = s1+1; 有错吗?short s1=1; s1+=1; 有错吗?

笑小枫🍁:对于 short s1=1; s1=s1+1; 因为 1 是 int 类型,因而 s1+ 1 运算后果也是 int 型,须要强制转换类型能力赋值给 short 型;所以编译会报错。

short s1=1; s1+=1; 能够正确编译,因为 s1+=1; 相当于 s1=(short)(s1+1); 其中有隐含的强制类型转换。


老面👴:你们我的项目中金额是应用的什么类型?

笑小枫🍁:Java 代码中应用 java.math.BigDecimal;Mysql 数据库中应用 decimal。

因为 float、double 都是浮点数, 都有取值范畴, 都有精度范畴. 浮点数与通常应用的小数不同, 应用中, 往往难以确定。所以说,float 和 double 都是不能用来示意准确的类型的;金额必须是齐全准确的计算, 故不能应用 double 或者 float, 而应该采 java.math.BigDecimal。


老面👴:简略说说 BigDecimal 的加减乘除操作吧

笑小枫🍁:

  • 加法运算:add()
  • 减法运算:subtract()
  • 乘法运算:multiply()
  • 除法运算:divide()

老面👴:BigDecimal 两个数据之间怎么比拟?

Java 中对 BigDecimal 比拟大小个别用的是 Bigdemical 的 compareTo 办法

比拟的后果

-1,示意小于

0,示意等于

1,大于

退出移动版