Java变量类型

数值型

  1. 字节型变量 --byte
    基本语法格式:byte 变量名 = 初始值;
    字节类型的变量只占1个字节,表示的数据范围较小(-128~127);
  2. 短整型变量 --short
    基本语法格式:short 变量名 = 初始值;
    short占用2个字节,表示的数据范围是(-32768~32767);
  3. 整型变量 --int
    基本语法格式:int 变量名 = 初始值;
    在java中,一个int型的变量占4个字节(8个二进制位bit>表示一个字节byte>),4个字节表示的数据范围为(-231~231-1),大概是-21亿到21亿.
    查看java中整型变量的数据范围:
System.out.println(Integer.MAX_VALUE);  // int 的最大值
System.out.println(Integer.MIN_VALUE); //int的最小值
  1. 长整型变量 --long
    基本语法格式:long 变量名 = 初始值;
    定义整型int时,初始化写为:int num= 10;而定义长整型时,写作:long num = 10l;或者long num = 10L;
    在java中,long型变量占8个字节表示的数据范围为(-263~263-1);
    查看长整型的数据范围:
System.out.println(Long.MAX_VALUE);
System.out.println(Long.MIN_VALUE)
    
// 运行结果
9223372036854775807
-9223372036854775808

long型变量能表示的数据范围远远超过了int型,能满足目前大多数项目的使用.

  1. 单精度浮点型变量 --float
    基本语法格式:float 变量名 = 初始值;
    float num = 1.0f;或写成float num = 1.0F;
    float类型的变量在java中占4个字节,表示的精度相较double类型来说较小,所以一般优先考虑使用double类型.

  2. 双精度浮点型变量 --double
    基本语法格式:double 变量名 = 初始值;
    double num = 1.0;
    在java中,double类型的变量占8个字节

字符型 --char

基本格式:char 变量名 = 初始值;
char ch = ‘A’; 定义字符时,用单引号+单个字母表示字符字面值;java中使用Unicode表示字符,因此一个字符占2个字节

布尔型 --boolean

基本数据格式:boolean 变量名 = 初始值;
boolean类型只有两种取值:true表示真,false表示假;在java中boolean型和int型之间不能转换,1不能表示true,0不能表示false;boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位,没有明确规定;

变量的命名规则

  1. 一个变量名只能包含数字, 字母, 下划线;
  2. 数字不能开头;
  3. 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量;
  4. 变量命名推荐小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写;

常量

常量指运行时类型不能发生改变
1.字面值常量
10 // int 字面值常量(十进制)
010 // int 字面值常量(八进制) 由数字 0 开头. 010 也就是十进制的 8
0x10 // int 字面值常量(十六进制) 由数字 0x 开头. 0x10 也就是十进制的 16
10L // long 字面值常量. 也可以写作 10l (小写的L)
1.0 // double 字面值常量. 也可以写作 1.0d 或者 1.0D
1.5e2 // double 字面值常量. 科学计数法表示. 相当于 1.5 * 10^2
1.0f // float 字面值常量, 也可以写作 1.0F
true // boolen 字面值常量, 同样的还有 false
‘a’ // char 字面值常量, 单引号中只能有一个字符

2.final关键字修饰的常量

final int a = 10; 
a = 20; // 编译出错. 提示 无法为最终变量a分配值

常量在程序运行过程中不能发生修改

类型转换

  • int和long,double相互赋值
int a = 10; 
long b = 20; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; // 编译通过. 

int a = 10; 
double b = 1.0; 
a = b; // 编译出错, 提示可能会损失精度. 
b = a; // 编译通过
  1. long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.

  2. double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.
    结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行

  • int和boolean相互赋值
int a = 10; 
boolean b = true; 
b = a; // 编译出错, 提示不兼容的类型
a = b; // 编译出错, 提示不兼容的类型

结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值.

  • int字面值常量给byte赋值
byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失
 

byte类型表示的数据范围是-128~127 ,而256超出了byte所能表示的范围;

  • 使用强制类型转换
int a = 0; 
double b = 10.5; 
a = (int)b; 
int a = 10; 
boolean b = false; 
b = (boolean)a;   //编译出错,提示不兼容的类型

结论:使用类型强制转换的方式可以将double类型转化为int类型,但是强制类型转换会导致数据精度丢失,赋值之后,10.5就变成了10,小数点后面的部分直接被忽略;强制类型转换不一定会成功,boolean型和int型之间无法强转,互不相干的类型之间不能强转.

类型提升

  • int和long的混合运算
int a = 10; 
long b = 20; 
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过

结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换

  • byte和byte的运算
byte a = 10; 
byte b = 20; 
byte c = a + b; 
System.out.println(c); 

// 编译报错
Test.java:5: 错误: 不兼容的类型:int转换到byte可能会有损失
 byte c = a + b; 
            ^ 

虽然a和b都是byte类型,但是还会编译错误,是由于在计算byte类型的数值时,会将类型先提升为int型,再进行计算,所以a和b都是先被提升为int型,再进行a+b;而此时的a+b也是int型,再赋给byte型的c,就出现了编译错误;

结论:由于计算机的CPU通常是按照4个字节为单位从内存中读取数据,为了硬件上实现方便,像byte和short这种低于4个字节的类型,会先提升成int型再计算.
正确写法:

byte a = 10; 
byte b = 20; 
byte c = (byte)(a + b); 
System.out.println(c);

未完待续…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值