强类型语言、弱类型语言
- 强类型语言:使之强制数据类型定义的语言。没有强制类型转化前,不允许两种不同类型的变量相互操作。强类型定义语言是类型安全的语言,如Java、C# 和 Python,比如Java中“int i = 0.0;”是无法通过编译的;
- 弱类型语言:数据类型可以被忽略的语言。与强类型语言相反, 一个变量可以赋不同数据类型的值,允许将一块内存看做多种类型,比如直接将整型变量与字符变量相加。C/C++、PHP都是弱类型语言,比如C++中“int i = 0.0;”是可以编译运行的;
基础数据类型
JAVA中一共有八种基本数据类型,他们分别是byte、short、int、long、float、double、char、boolean
数据类型 | 位数 | 默认值 | 取值范围 | 举例说明 |
---|---|---|---|---|
byte(位) | 8 | 0 | -2^7 - 2^7-1 | byte b = 10; |
short(短整数) | 16 | 0 | -2^15 - 2^15-1 | short s = 10; |
int(整数) | 32 | 0 | -2^31 - 2^31-1 | int i = 10; |
long(长整数) | 64 | 0 | -2^63 - 2^63-1 | long l = 10l; |
float(单精度) | 32 | 0.0 | -2^31 - 2^31-1 | float f = 10.0f; |
double(双精度) | 64 | 0.0 | -2^63 - 2^63-1 | double d = 10.0d; |
char(字符) | 16 | 空 | 0- 2^16-1 | char c = ‘c’; |
boolean(布尔值) | 8 | false/true | false | boolean b = true; |
基础数据类型转换
- 自动(隐式)类型转换:从小类型到大类型,不需要强制转换符
/*
此处将int类型变量a的值赋值给double类型变量b,因为是小类型转换成大类型,
int类型变量a的值会自动转换成double类型并赋值给变量b
*/
int a =5;
double b=a;
- 强制类型转换:从大类型到小类型,需要强制转换符实现强制转换
- 大类型 强制转换为小类型时,强转有可能产生精度丢失
例如:double类型变量a的值为5.123,强制转换成int类型后数值为5,小数位舍弃,产生了精度丢失。 - 强制转换格式:(需要转换成的类型)变量;
/*此处将double类型变量a的值赋值给int类型变量b,因为是大类型转换成小类型, 需要强制转换符先将double类型变量a的值转换成int类型再赋值给int类型变量b 大类型 强制转换为小类型时,容易出现丢失精度的问题,此处b的值为5 */ double a = 5.1212; int b = (int)a; // b =5;
-
关于byte、short、char赋值与运算的强转规则:
-
不参与运算,整数直接量可以直接赋值给byte,short,char,不需要强转。
-
byte,short,char型变量参与运算时,需要强转
-
/*
b1与b2不参与运算,整数直接量可以直接赋值给byte;
参与运算后,b1+b2和的值默认为int类型,需要强制转换成byte类型再赋值给byte类型变量b3
*/
byte a=2;
byte b=3;
byte c=(byte)(a+b);
- 用于数据比较不要用float、double
因为这个两个数据类型精度不高,传感器有误,可能结果不正确
建议使用BigDecimal