数据类型、转换重点知识总结
数据类型
强类型语言
- 要求变量的使用严格符合规定,所有变量必须先定义后才能使用。
- java、.NET、C/C++
弱类型语言
- 相较于强类型语言的规定和要求较为宽松。
- vb,php,JavaScript
Java的数据类型分为两大类
- 基本数据类型(primitive type)
- 引用数据类型(reference type)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21public class demo2 {
public static void main(String[] args) {
//八大基本数据类型
//整数
int num1 = 10;//最常用
byte num2 = 20;
short num3 = 30;
long num4 = 30L;//long类型要在数字后面加个l
//浮点数:小数
float num5 = 50.1f;//float类型要在数字后面加个f
double num6 = 3.1415926d;
//字符类型
char name = 'a';
//字符串,String不是关键字,是类
String namea = "希文";
//布尔值
boolean flag = false;补充知识
字节
位(bit):是计算机内部数据储存的最小单位,11001100是一个八位二进制数。
字节(byte):是计算机中数据处理的基本单位,习惯上用大写B来表示。
1B(byte,字节)=8bit(位)
字符:是指计算机中使用的字母、数字、字和符号
转换
1bit表示一位
1Byte表示一个字节 1B=8b
1024B=1KB
1024KB=1M
1024M=1G
1
TIPS:一个英文字母为8位,即1个字节;一个汉字为16位,即2个字节。
简单区分一下32位和64位操作系统的区别
- 32位的cpu处理器,只能安装32位的电脑操作系统;
- 64位的cpu处理器,则可以安装32位和64位操作系统,所以64位处理器是向下兼容的;
- 但是,如果真的在64位处理器的电脑上面安装32位操作系统,那么会导致处理器的性能无法充分发挥。
类型转换
由于Java是强类型语言,所以要进行有些运算的时候,需要用的类型转换。
低—————————————————-高
byte,short,char→int→long→float→double
这里的低—–高其实是精度的由低到高!
小数的优先级一定大于整数!
运算中,不同类型的数据先转化为同一类型,然后再进行运算。
强制类型转换:(类型)变量名→高—–低
自动类型转换:不需要任何操作→低—–高
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public class demo5 {
public static void main(String[] args) {
int i = 128;
double b = i;
System.out.println(i);
System.out.println(b);
//强制转换类型:(类型)变量名→高--低
/*byte b = i;//转换前
byte b = (byte)i;//转换后
*/
//自动转换 不需要加任何东西 低--高
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题。
*/
System.out.println("==========================");
System.out.println((int)23.7); //23
System.out.println((int)-45.89); //45
System.out.println("==========================");
char c = 'a';
int d = c+1;
System.out.println(d);
System.out.println((char)d);
}
}
溢出问题(重点)
1 | public class demo06 { |
重点分析一下
- 新知识点
- JDK新特性:数字之间可以用下划线分割,符合四位分级,并不会速出下划线。适合我们中国人的一个细节。非常nice!
- 溢出问题
- 溢出问题:money已经超出了int类型的范围,溢出了。
- 问题滞留
- 这里为什么输出结果还是错的呢,这里涉及到的问题就是在转换为long类型之前。已经出现溢出问题了,到达long这里的时候就是一个有问题的数据。
- 解决方案:
先把一个数转换为long(money和years都行,任选其一),整个表达式都提升为long了.这样就 可以避免溢出了。
底层原理:
- 概念:在Java中,如果两个操作数的类型不同,编译器会将它们都提升到更高的数据类型,并执行操作。这个过程称为“数据类型提升”。
- 规则:Java会将较低的数据类型自动转换为较高的数据类型,以便进行操作。
- 实操:在乘法操作中,如果一个操作数是
int
类型,而另一个是long
类型,Java会自动将int
类型提升为long
类型,然后执行乘法操作。
为什么呢?
因为
long
类型的范围比int
类型更大,可以容纳更大的值,所以将int
类型提升为long
类型可以避免溢出问题。综上:因此,即使
money
是int
类型,years
是long
类型,Java会自动将money
提升为long
类型,然后执行乘法操作,以确保乘法操作在long
类型范围内进行,避免溢出问题。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xiwen!