基本数据类型有四类八种。
- 在Java中int都占4个字节,long都占8个字节
- 整形和浮点型都是有符号的 (C语言中有unsigned表示无符号)
- 整形默认int,浮点型默认double
定义变量的语法格式:
数据类型 变量名=初始值;
例如
int a=3;
double b=3.1;
char c=‘A’;
int a=3;
System.out.println(a);
int a;
a=3;
System.out.println(a);
- 如果变量没有合适的初始值,建议设为0
- 变量使用前要赋予初值
- 变量赋予的初值不能打过数据类型的范围
- int占4个字节
与整形变量相似,为了方便区分,建议在long类型的变量初始值后面加L或l
int a=10;
long b=10L; (一般推荐L,区分度更高一点,l与1相似)
long c=10l;
System.out.println(a);
System.out.println(b);
注意:
- 推荐长整型变量定义的初始值后面加L
- long占8个字节
short a=3;
System.out.println(a);
注意
- short都占2个字节
byte a=3;
System.out.println(a);
注意:
1.byte占一个字节
float a=1.1f;
float b=1.1F;
System.out.println(a);
System.out.println(b);
推荐使用double
double a=3.0;
System.out.println(a);
除法上与C语言相似
int a=1;
int b=2;
System.out.println(a/b);
int a=1;
int b=2;
System.out.println(a*1.0/b);
double a=1.0;
double b=2.0;
System.out.println(a/b);
相信大家都知道上面运行的结果分别是0
,0.5
,0.5
下面的代码大家猜一下运行的结果是什么
double a=1.1;
double b=1.1;
System.out.println(a*b);
为什么不是1.21呢?
这是因为double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势
必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值
注意:
- double是8个字节
- 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
char a=‘1’;
char b=‘人’;
System.out.println(a);
System.out.println(b);
注意:
1.Java 中使用 单引号 + 单个字母 的形式表示字符字面值
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此
一个字符占用两个字节, 表示的字符种类更多, 包括中文
boolean a=true;
System.out.println(a);
boolean b=false;
System.out.println(b);
布尔型常用来表示真假
注意:
- boolean 类型的变量只有两种取值, true 表示真, false 表示假
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法
因此C语言中用1和0表示真假也就用不了
例如
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验
例如
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐
式) 和 强制类型转换(显式)
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
特点:数据范围小的转为数据范围大的时会自动进行
例如
a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
编译器会将float转换为double,然后进行赋值
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的
100默认int,但没有超过byte的范围,隐式转换
257默认int,但超过byte的范围,要显示转换
注意:
- 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换为范围更大的类型
- 如果需要把范围大的类型赋值给范围小的类型,需要显示转换,但可能精度丢失
- 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
- 强制类型转换不一定能成功,不相干的类型不能互相转换(如boonlean)
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的
1.int与long之间
int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long–> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功:a + b==>int + long—>long + long 赋值给long
2.byte与byte
我们可以看到byte和byte虽然是相同的类型,但是出现编译报错,原因是虽然a和b都是byte,但是计算a+b时先把a和b提升为int类型,再计算,得到的结果是int,再赋值给a,就会出现上述的错误
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short
这种低于 4 个字节的类型, 会先提升成 int, 再参与计算
正确的写法:
注意:
- 不同数据类型混合计算时,会先把范围小的提升为范围大的
- 对于
byte,short
这种比4个字节小的类型,会先提升成4个字节的int,再运算
在java中使用String类定义字符串类型,比如:
String s1=“hello”;
String s2=“world”;
System.out.println(s1);
System.out.println(s2);
System.out.println(s1+s2);//s1+s2表示将s1和s2进行拼接 输出helloworld
int a=10; //法一
String s1=a+“”;
String s2=String.valueOf(a); //法二
System.out.println(s1);
System.out.println(s2);
String s1=“100”;
int a=Integer.parseInt(s1);
System.out.println(a);
这里只是简单介绍了字符串类型。