目录
1.数据类型
数据类型分为基本数据类型和引用数据类型(引用数据类型后面数组的文章会讲)
基本数据类型有4类、8种。
- 4类:整型、字符型、浮点型以及布尔型。
- 8种:如下表
注意:Java数据类型是不分计算器是32位还是64位的,所以不论是32位还是64位都是上图中的字节数。
请把 Java yyds 打在公屏上。
2.变量
变量是用不同数据类型定义出来的
2.1 整型变量
整型变量
public class HardStudy {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
}
}
代码结果:
public static void main(String[] args) {
int a = 10;
System.out.println(Integer.MAX_VALUE);
}
代码结果:
注意:在Java中所定义的变量如果没有初始化,那么编译不能通过。
代码报错
再使用前一定要初始化,否则无法使用,从这里可以看出Java很安全。
请再次把 Java yyds 打在公屏上
注意事项:
- int不论在何种系统下都是4个字节
- 如果没有合适的初始值,可以设置为0
- 在给变量设置初始值时,值不能超过int的表示范围,否则会导致溢出4.变量在使用之前必须要赋初值,否则编译报错
- int的包装类型为Integer(后面的文章会讲)
整形的最大值是 2147483647,但是如果赋值是超过了这最大值会怎么样呢?
可以看到代码报错,并且输出后提升了哪里错了。
Java 是世界最好的语言!!!
长整型变量
public static void main(String[] args) {
long a = 100L;//大写L表示这是一个长整型变量
System.out.println(a);
}
代码结果:
如果写的是一个小写的l,也不会报错,只不过会被解析成整型。
public static void main(String[] args) {
long a = 10L;
System.out.println(Long.MAX_VALUE);//输出长整型的最大值
System.out.println(Long.MIN_VALUE);//输出长整型的最小值
}
代码结果:
注意事项:
- 长整型变量的初始值后加L或者I,推荐加L
- 长整型不论在那个系统下都占8个字节
- 长整型的表示范围为: -2^63~2^63-1
- long的包装类型为Long
短整型变量
public static void main(String[] args) {
short sh = 100;
System.out.println(sh);
System.out.println(Short.MAX_VALUE);//short最大值
System.out.println(Short.MIN_VALUE);//short最小值
}
代码结果:
注意事项:
- short在任何系统下都占2个字节
- short的表示范围为: -32768 - 32767
- 使用时注意不要超过范围(一般使用比较少)
- 4. short的包装类型为Short
字节型变量
public static void main(String[] args) {
byte yyds = 100;
System.out.println(yyds);
System.out.println(Byte.MAX_VALUE);//最大值
System.out.println(Byte.MIN_VALUE);//最小值
}
代码结果:
注意事项:
- byte在任何系统下都占1个字节
- byte的范围是: -128 - 127.
- 字节的包装类型为Byte
2.2 浮点型变量
单精度浮点型
如果按照上面的写法的话,123.123会被认为是一个双精度浮点型。而一个 float 是4个字节,double类型是8个字节,存不下,所以报错。
正确写法是强制类型转换成 float 或者在123.123后面加一个f。(大写或者小写的都可以)
public static void main(String[] args) {
float b = 123.123f;
float c = (float)12.00;
}
双精度浮点型
public static void main(String[] args) {
double yyds = 123.123;
System.out.println(yyds);
System.out.println(Double.MAX_VALUE);//最大值
System.out.println(Double.MIN_VALUE);//最小值
}
代码结果:
注意事项:
- double在任何系统下都占8个字节
- 浮点数与整数在内存中的存储方式不同,不能单纯使用2^n的形式来计算
- double的包装类型为Double
- double类型的内存布局遵守IEEE 754标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数,势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
2.3 字符型变量
public static void main(String[] args) {
char a = 'Y';
System.out.println(a);
char b = '李';
System.out.println(b);
char c = 99;
System.out.println(c);
char d = 67;
System.out.println(d);
}
代码结果:
在Java中使用的是Unicode字符集,这和C语言的ASCII是一样的。99表示小写c,67表示大写C,所以会输出小写的 c 和大写 C 。
一个汉字占两个字节,所以可以输出。
注意事项:
- Java中使用单引号+单个字母的形式表示字符字面值.
- 计算机中的字符本质上是一个整数.在C语言中使用ASCII表示字符,而Java中使用Unicode表示字符.因一个字符占用两个字节, 表示的字符种类更多,包括中文.
2.4 布尔型变量
在 Java 中没有所谓的0为假,非0为真;而是真只能是true,假只能是flase。
可以看到编译器提示错误。
public static void main(String[] args) {
boolean a = true;
System.out.println(a);
boolean b = false;
System.out.println(b);
}
代码结果:
注意事项:
- boolean类型的变量只有两种取值, true表示真, false表示假.
- Java的boolean类型和int不能相互转换,不存在1示true, 0表示false这样的用法.
3.字符串类型
public static void main(String[] args) {
String arr1 = "Hello";
String arr2 = "World";
System.out.println(arr1 + arr2);//arr1+arr2是拼接的意思
}
代码结果:
在有些情况下,需要将字符串和整型数字之间进行转换。
public static void main(String[] args) {
int x = 10;
int y = 20;
System.out.println("x: "+x +" y:"+y);
System.out.println("x: "+x+y);
System.out.println(x+y+"lilong");
System.out.println(x + y);
}
代码结果:
当字符串和整数在一起使用+号的时候,就是个拼接的意思。
int转String
把一个整数变成字符串
public static void main(String[] args) {
int i = 100;
String str = i+"";
System.out.println(str);
}
代码结果:
String转int
把一个字符串变成整数
public static void main(String[] args) {
String str = "123456";
int i = Integer.parseInt(str);
System.out.println(i+1);
}
代码结果:
4.类型转换
int 是4个字节,long是8个字节;空间不够,无法赋值给num。
正确写法:
public static void main(String[] args) {
int num = 1;
long len = 2L;
num = (int)len;
System.out.println(num);
int x = 10;
long y = 20L;
y = x;
System.out.println(y);
}
可以强制类型转换或者是将小字节数的赋给大字节数的。
代码结果:
4.1 自动类型转换(隐式)
自动类型转换的特点是,数据范围小的转为数据范围大的是会自动进行。
例子:
public static void main(String[] args) {
int num = 100;
long sum = 200L;
sum = num;
System.out.println(sum);
}
代码结果:
编译器会自动将int转化成long输出。
4.2 强制类型转换(显示)
public static void main(String[] args) {
int Eat = 100;
long Sleep = 200L;
Eat = (int)Sleep;
System.out.println(Eat);
}
代码结果:
将范围小的转为范围大的是必须要强制类型转化,不然会报错。
注意事项:
- 不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型
- 如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失
- 将一个字面值常量进行赋值的时候, Java会自动针对数字范围进行检查
5.类型提升
不同类型的数据之间相互运算时,数据小的类型会被提升到大的。
Code会被提升成long类型,计算的结果也是long类型,int只有4个字节,存不下所以会报错。
正确写法1:
public static void main(String[] args) {
int Code = 100;
long Play = 200;
int Good = (int)(Code + Play);
System.out.println(Good);
}
正确写法2:
public static void main(String[] args) {
int Code = 100;
long Play = 200;
long Good = Code + Play;
System.out.println(Good);
}
代码结果:
byte类型该如何提升?
可以看到编译器报错。
- byte和byte都是相同类型,但是出现编译报错.原因是,虽然a和b都是byte,但是计算a+ b会铣将a和b都提升成int,再进行计算,得到的结果也是int, 这是赋给C,就会出现上述错误.
- 由于计算机的CPU通常是按照4个字节为单位从内存中读写数据.为了硬件上实现方便,诸如byte和short这种低于4个字节的类型,会先提升成int,再参与计算
正确写法:
public static void main(String[] args) {
byte num = 10;
byte len = 20;
int sum = num + len;
System.out.println(sum);
}
代码结果:
类型提升小结:
- 不同类型的数据混合运算,范围小的会提升成范围大的.
- 对于short, byte这种比4个字节小的类型,会先提升成4个字节的int ,再运算.