【Java八股 | 基础篇 |数据类型类】
前言:
今天主要学习Java八股基础篇中跟数据类型有关的题目。
一、八种基本数据类型
1.整数类型(byte,short,int,long)
2.浮点类型(float,double)
3.字符类型(char)
4.布尔类型(boolean)
| 数据类型 | 占用字节 | 位数 | 取值范围 | 对应包装类 |
|---|---|---|---|---|
| byte | 1 | 8 | -128到127 | Byte |
| short | 2 | 16 | -32768-32767 | Short |
| int | 4 | 32 | -2147483648到2147483647 | Integer |
| long | 8 | 64 | -9223372036854775808到9223372036854775807 | Long |
| float | 4 | 32 | 1.4E - 45 到 3.4028235E38 | Float |
| double | 8 | 64 | 4.9E - 324 到 1.7976931348623157E308 | Double |
| char | 2 | 16 | '\u0000'(0) 到 '\uffff'(65535) | Character |
| boolean | 无明确规范,通常为1个字节 | 无明确位数 | true或false | Boolean |
二、int和long是多少位,多少字节的
int是32位(bit),占4个字节。long是64位(bit),占8个字节
三、long和int可以相互转换吗?
可以,但是由于long的范围大于int,所以int转long是安全的,但long转int可能会造成数据安全问题。
int转long,自动类型转换即可。也可以强转,但没必要
int intValue = 100; long longValue = intValue; // 直接赋值,自动转换为 long System.out.println(longValue); long转int,强制类型转换。因为long转int可能会出现超范围导致数据安全问题,所以在转之前最好先检查。
long longValue = 2147483648L; // 超出 int 最大值 2147483647 if (longValue >= Integer.MIN_VALUE && longValue <= Integer.MAX_VALUE) { int intValue = (int) longValue; System.out.println(intValue); } else { System.out.println("数值超出 int 范围"); } 四、数据类型转换方式你知道哪些?
1.自动类型转换(隐式转换):
当目标类型的取值范围(例如long)大于当前类型的取值范围(例如int)时,Java可自动转换
2.强制类型转换(显式转换):
当目标类型的取值范围(例如int)小于当前类型的取值范围(例如long)时,必须使用强制类型转换。语法为:目标类型 变量名 = (目标类型) 源类型
3.字符串转换:
将字符类型的数据转化为其他数据类型。例如,将字符串转换为整型int,可以使用Integer.parseInt()方法。将字符串转换为浮点型float,可以使用Float.parseFloat()方法。
String str = "123"; int num = Integer.parseInt(str); System.out.println(num); // 输出: 123 String str = "3.14"; float floatValue = Float.parseFloat(str); System.out.println(floatValue); // 输出3.14 4.数值之间的转换:
Java提供了一些数值类型之间的转换方法,例如,将整型转换为字符型(String.valueOf()方法和toString()方法等)、将字符型转换为整型(Character.getNumbericValue()等)等。
int num = 123; String str = String.valueOf(num); System.out.println("转换结果: " + str); // 输出: 转换结果: 123 int num = 456; String str = Integer.toString(num); System.out.println("转换结果: " + str); // 输出: 转换结果: 456 public class CharToIntExample { public static void main(String[] args) { char charValue = '7'; // 示例字符 int intValue = Character.getNumericValue(charValue); System.out.println("字符 '" + charValue + "' 转换为整型: " + intValue); } } 五、装箱和拆箱是什么?
装箱(Boxing)和拆箱(Unboxing)是将基本数据类型和对应的包装类之间进行转换的过程。
装箱:
基本类型转换为对应包装类,如int到integer。
底层实现:编译器自动调用包装类的ValueOf()方法。
int num = 100;
Integer i = num; // 自动装箱,等价于 Integer i = Integer.valueOf(num);
boolean flag = true;
Boolean b = flag; // 自动装箱,等价于 Boolean b = Boolean.valueOf(flag);
拆箱:
包装类转换为对应的基本类型,如integer到int。
底层实现:编译器自动调用包装类的***Value()方法。
当包装类对象为null时,自动拆箱会直接抛出空指针异常。
Integer i = Integer.valueOf(100);
int num = i; // 自动拆箱,等价于 int num = i.intValue();
Boolean b = Boolean.TRUE;
boolean flag = b; // 自动拆箱,等价于 boolean flag = b.booleanValue();
六、Java为什么要有integer?
1.integer是int的包装类,把int包装为object对象
2.集合只能存储对象,不能存储基本数据类型,有了integer就可以把int包装为对象存储到集合中
3.integer中内置了很多方法,方便了整数的操作
4.integer适配泛型,Java中的泛型不支持基本类型
七、interger相比与int的区别
1.integer是引用类型,是一个对象;int是基本类型,直接存储数值本身
2.integer默认值为null,表示没有指向任何对象;int默认值为0
3.integer对象本身存储在堆内存中,栈内存中存储对象的引用地址;int存储在栈内存中,直接保存数值
4.integer如果“==”比较的话比较的是地址,而不是数值,需要使用equals()方法比较值;int用“==”比较数值。
需要注意的是当interger的值在-128到127时,用“==”比较则会比较数值,因为integer缓存池的存在,超出这个范围比较数值,需要用equals()方法。
八、说一下 integer的缓存
Java在integer内部实现了一个静态的缓存池,用于存储特定范围内的数值,默认为-128到127,当创建的对象在该范围内时,只有第一次需要创造,以后的每次都是调用第一次所创造的。
结语、
以上内容仅表示个人观点,若有异议,欢迎指出,在评论区共同讨论。创作不易,点赞关注加收藏,共同进步。