基本的数据类型有四类八种
java 的变量就好像奶茶杯子,有焦糖奶茶,乌龙奶茶,脏脏茶。有小杯,中杯,大杯,超大杯,霸霸杯。每一种杯子都会装载Java的变量,比如点奶茶我会说 "我要大杯的焦糖奶茶 ” ,我们就这样告诉编译器 “ 请给我一个byte变量保存值为70”。当然你还要给这个变量一个名字,就好像店员贴上代表你订单的标签,这样就不会把和你点一样奶茶的其他顾客和你搞错了。
名称 | 表示代码 | 有效范围 | 存储 | |
---|---|---|---|---|
字节型 | byte | -128 ~ 127 | 单字节 | 8bit |
短整型 | short | -32768 ~ 32767 | 二字节 | 16bit |
整型 | int | -2147483648 ~ 2147483647(±21亿) | 四字节 | 32bit |
长整型 | long | ±9.28*10^18(默认为int 赋值大于int时在值后加L) | 八字节 | 64bit |
public class Shu{
public static void main(String[] args){
long = 10000000L;//long在赋值时默认类型为int 当值大于int的有效范围时在所赋值后加L
}
}
注:电脑是以二进制存储以及发送接收数据的。二进制的一位,就叫做 1 bit。也就是说 bit 的含义就是二进制数中的一个数位,即 “0” 或者 "1"。Byte 是字节的英文写法。它的简写为大写字母 “B"。英文字符通常是一个字节,也就是 1B,中文字符通常是两个字节,也就是 2B。字节 Byte 和比特 bit 的换算关系是 1 Byte = 8 bit 。
名称 | 表示代码 | 有效范围 | 精度 | 存储 | |
---|---|---|---|---|---|
单精度 | float | ±3.4*10^38 | 24位(约7位十进制数字 赋值时在值后加F) | 四字节 | 32bit |
双精度 | double | ±1.7*10^308 | 53位(约16位十进制数字) | 八字节 | 64bit |
注:float 和 double 并不能精确的表示十进制的小数。简单的说自然数都是由“1”累加而成,此时十进制和二进制都可以无限制累加,就如两个半径不同的同心圆,从圆心放射一条直线在两个圆上都能找到一一对应的点。小数就不同,小数和分数一样都是用来表示不是完整的“1”的部分,简单的说十进制可以把“1”分为10份每份为“0.1”,同理“0.1”也可继续分成10份,而二进制只能把“1”分为两份,未能分割的部分自然不能精确表示了。
名称 | 表示代码 | 有效范围 | 存储 | ||
---|---|---|---|---|---|
字符型 | char | ' '中包裹一个字符 | 0~65535的整数 | 二字节 | 16bit |
名称 | 表示代码 | 表现形式 | 存储 |
---|---|---|---|
布尔 | boolean | true , false | 1bit |
数据类型的转换分为两种,自动类型提升和强制类型转换 boolean类型不参与类型转换
小范围类型的数据到大范围类型会发生自动类型提升(指有效范围)
其顺序由小到大为 byte short chart int long float double
public class Zdlxzh{
// 公共的 静态的 无类型 主要 (字符串[] 参数)
public static void main(String[] args){
//字节型 命名为b 赋值120
byte b=120;
//整型 命名为i 把b的值赋予i (赋值的顺序是自右向左的)
int i=b;
//系统 输出 打印换行(即打印i的值并光标换行)
System.out.println(getType(i));
}
}
大范围类型的数据赋值给小范围类型的变量,在编译时会报错,如果需要赋值,就要强制类型转换,此过程中所赋值可能会损失精度。
public class Qzlxts{
// 公共的 静态的 无类型 主要 (字符串[] 参数)
public static void main(String[] args){
//整型 命名为i 赋值120
int i=120;
//字节型 命名为b 把i的值赋予i (赋值的顺序是自右向左的)
byte b=i;
//系统 输出 打印换行(即打印b的值并光标换行)
System.out.println(b);
}
}
public class Qzlxts{
// 公共的 静态的 无类型 主要 (字符串[] 参数)
public static void main(String[] args){
//整型 命名为i 赋值120
int i=120;
//字节型 命名为b 把i的值赋予i (赋值的顺序是自右向左的)
byte b= (byte)i;//小的数据类型 命名=(所要转换的数据类型)大的数据类型
//系统 输出 打印换行(即打印b的值并光标换行)
ystem.out.println(b);
}
}
看到此处读者或有疑问,此时int所赋值的范围在byte的有效范围内 若大的数据类型所赋值超出了小的数据类型的有效范围 那强制转换后的值又如何表示呢?
public class Qzlxts{
public static void main(String[] args){
int i1=128;
int i2=129;
int i3=130;
byte b1=(byte)i1;
byte b2=(byte)i2;
byte b3=(byte)i3;
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
int i4=65600;
char c1=(char)i4;
System.out.println(c1);
}
}
char 打印的结果为什么为@我们再新的程序中进行详解
public class Char65535{
public static void main(String[] args){
char c1='A';
char c2=65;
char c3='A'+32;
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c1+32);
int i=65601;
char c4=(char)i;
System.out.println(c4);
char c5='中';
System.out.println(c5);
}
}
示例: char m='a'; ——a char m='a'+1; ——b 提升为int,计算结果98对应的字符是b。 char m='中'+'国'; ——42282 char m='中'+'国'+'国'+'国'; ——报错 int转char有损失。因为结果已经超出char类型的范围。 char m='中'+1; ——丮 1是int,结果提升为int,输出对应的字符。
在使用中我们或许还会遇到一种情况 我们的变量在进行运算时 超出了原有数据类型的有效范围 解决这种情况我们可以进行如下操作
假设有那么一天 二次员的月收入达到了1个亿(希望有那么一天 虽然那是王健林的小目标)那么计算我的年薪时数据就会超出int的有效范围 (当然我们一开始就可以用把一亿存在long里)
public class Bl{
public static void main(String[] args){
int sal=1000000000;
long result=(long)sal*12;//
System.out.println(result*12);
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。