前言
在初识Java后,本篇将进一步介绍Java的基础知识。
在本篇中,将着重介绍java中的数据类型与变量相关知识。
目录
一.数据类型
在
Java
中数据类型主要分为两类:
基本数据类型
和
引用数据类型
。
基本数据类型有4类8种
1.基本数据类型
1)整型:字节型(byte),短整型(short),整型(int),长整型(long)。
2)浮点型: 单精度浮点数(float),双精度浮点数(double)。
3)字符类型: 字符型(char)。
4) 布尔类型: 布尔型(boolean)。
注意:
- 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
- 整形和浮点型都是带有符号的
-
整型默认为int型,浮点型默认为double
-
字符串属于引用类型。
2.引用数据类型
引用数据类型包括:数组,类,接口,字符串(String)
此内容后面介绍
二.常量
1.概念
在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的计算结果等,对于这些经常改变的内容,在
Java
程序中,称为变量
。
而数据类型就是用来定义不同种类变量的
。
2.语法
定义变量的语法格式为:数据类型 变量名
=
初始值
;
例如:
- public class Test {
- public static void main(String[] args) {
- int a=10; // a是变量,a中的值是可以修改的
- byte b=12;
- short c=14;
- long d =16L; //L表示该常量为long类型,一般可省略
- System.out.println("a");
- System.out.println("b");
- System.out.println("c");
- System.out.println("d");
- }
- }
3.整型变量
1)整型变量(int)
int a=10;
无论多少位系统中,int都占用4个字节。
变量在使用之前必须要赋初值,否则会编译报错
如果没用合适的初值,可以设置为0。
int的包装类为Integer,利用包装类,可以获得数据类型的表示范围,如同:
设置初值时,需要在范围内,否则会发生溢出。
2)长整型变量(long)
- long a=10086;
- long b=10086L;
定义长整型变量时,可以在末尾加上L表示该类型为长整型,也可以省略。
长整型的包装类为Long
长整型变量无论在哪个系统下都占用8字节
3)短整型变量
- short a=10;
- //short表示的范围
- System.out.println(Short.MAX_VALUE);
- System.out.println(Short.MIN_VALUE);
短整型无论在哪个系统环境下都是占2个字节,使用时注意不要超过范围。
短整型的包装类为Short
4)字节型变量
- byte b=10;
- //byte表示的范围
- System.out.println(Byte.MAX_VALUE);
- System.out.println(Byte.MIN_VALUE);
字节型变量无论在哪个系统上都占用1个字节
字节型的包装类为Byte。
4.浮点型变量
当我们使用除法运算时,试想一下,整型类型的3除以2,结果能得到1.5吗。
运行程序得到结果为0.
在
Java
中
, int
除以
int
的值仍然是
int(
会直接舍弃小数部分
)
。如果想得到
0.5,
需要使用
double
类型计算
.
1)双精度浮点型(double)
注意事项:
- double类型在任何系统上都占8个字节
-
浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
-
double的包装类为Double
-
double 类型的内存布局遵守 IEEE 754 标准 ( 和 C 语言一样 ), 尝试使用有限的内存空间表示可能无限的小数 , 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。例如:
我们会下意识认为 1.1*1.1=1.21。
程序结果却为:
2)单精度浮点型(float)
float num = 1.0f; // 写作 1.0F 也可以
float
类型在
Java
中占四个字节
,
同样遵守
IEEE 754
标准
.
由于表示的数据精度范围较小
,
一般在工程上用到浮点数都优先考虑 double,
不太推荐使用
float.
float
的包装类型为Float.
5.字符型类型
- char c1='a';
- char c2='2'; //char类型可以存放整型
- System.out.println(c1);
- System.out.println(c2);
Java
中使用
单引号
+
单个字母 的形式表示字符字面值。
计算机中的字符本质上是一个整数
.
在
C
语言中使用
ASCII
表示字符
,
而
Java
中使用
Unicode
表示字符
.
因此 一个字符占用两个字节,
表示的字符种类更多
,
包括中文。
char的包装类为Character。
6.布尔型变量
布尔类型常用来表示真假,在现实生活中也是经常出现的,比如:听说xxx
同学买彩票中了一个亿
...
,听到后估计大部分人第一反应就是:我x
,真的假的?
“真的假的”,若是真的则是true,假的则是false。
- boolean b = true;
- System.out.println(b);
- b = false;
- System.out.println(b);

注意事项:
- boolean 类型的变量只有两种取值, true 表示真, false 表示假。
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。
- boolean的包装类型为Boolean。
7.字符串类型
在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进行拼接
在有些情况下,需要将字符串和整形数字之间进行转换:
1)int类型转换为String类型
- int num = 10;
- // 方法1
- String str1 = num + "";
- // 方法2
- String str2 = String.valueOf(num);
2)String类型转换为int类型
- String str = "100";
- int num = Integer.parseInt(str);
注意:String类型转int类型需要合法的数字字符串,若混着字母等符合字符,则会编译失败。
三.类型转换与类型提升
1.类型转换
Java
作为一个强类型编程语言
,
当不同类型之间的变量相互赋值的时候
,
会有教严格的校验。
- int a = 10;
- long b = 100L;
- b = a; // 可以通过编译
- a = b; // 编译失败
因a为int型,占4个字节,b为long型,占8个字节,小转大能成功,大转小失败。
当给b赋值a,则可以通过。此时为自动类型转换。
当给a赋值b,编译失败,此时若要转换,需要强制类型转换
在
Java
中,当参与运算数据类型不一致时,就会进行类型转换。
Java
中类型转换主要分为两类:自动类型转换
(
隐式)
和 强制类型转换
(
显式
)
。
自动类型转换
自动类型转换即:
代码不需要经过任何处理,在代码编译时,编译器会自动进行处理
。
特点:数据范围小的转为数据范围大的时会自动进行
。
强制类型转换
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的。
注意事项:
- 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
- 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
- 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
- 强制类型转换不一定能成功,不相干的类型不能互相转换
2.类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
1)
int
与
long
之间:
int
会被提升为
long
- int a=10;
- long b=5;
-
- int num1 = a+b; //编译出错,因为a+b结果提升为了long类型,不能用int类型接受
- long num2 = a+b;
2)
byte
与
byte
的运算
- byte a = 10;
- byte b = 20;
- byte c =a + b; //编译出错,因为byte与byte运算会提升成int类型。
byte
和
byte
都是相同类型
,
但是出现编译报错
.
原因是
,
虽然
a
和
b
都是
byte,
但是计算
a + b
会先将 a 和
b
都提升成
int,
再进行计算
,
得到的结果也是
int,
这是赋给
c,
就会出现上述错误。
正确的写法为:
- byte a = 10;
- byte b = 20;
- byte c = (byte)(a + b);
- System.out.println(c);
【
类型提升小结
:
】
1.
不同类型的数据混合运算
,
范围小的会提升成范围大的
.
2.
对于
short, byte
这种比
4
个字节小的类型
,
会先提升成
4
个字节的
int ,
再运算
以上便是全部内容,如有不对,欢迎指正。
评论记录:
回复评论: