Java基础知识学习-变量

变量
初始的的必要性

变量在声明后不可以直接使用,而是需要经过初始化,原因是只有声明而没有初始化的变量在‘编译’时会被丢弃,不会开辟新的空间,那么在后续语句中使用时就无法找到改变量

数据类型的转换

首先Java对于整数默认用 int 接收,浮点数用 double 接收。

long num = 10;	//正确
float num = 0.1;	//错误

显然此处需要发生数据类型的转换,数据类型转换有两种,分别是‘自动类型转换’和‘强制类型转换’,这里有一处我以前学习时没有的思考,之前只是单纯的使用强制类型转换来得到自己想要的类型,而其实自动类型转换是将‘范围小’的类型转换为‘范围大’的类型,而强制类型转换则反过来将‘范围大’的类型转换为‘范围小’的类型,强制数据转换由我们自己操作,这是对自动类型转换的一种功能上的补充。

在此处 int 自动转换为 long 这没有问题,而 double 转换成 float 就出现了问题,double 的范围是大于 float 的。

正确的写法应该使用‘F’或者强制类型转换

float num = 0.1F;
float num = (float)0.1;

同样的当:

long a = 11111111111;	//11个1,并没有超过 long 的范围,但是产生报错,因为此时当成 int 进行检测
long a = 11111111111L;	//正确

由于整型常量存储有规范性,Java可以自动识别,所以以下情况也是对的:

byte num = 127;	//正确
char num = 65535;	//正确
short num = 30000;	//正确

值得注意的是,即使是自动类型转换这样将‘范围小’的类型转换为‘范围大’的类型也不能保证数据一定不会失真。以下3种情况是会导致数据失真的:

1.int --> float

2.long --> float

3.long --> double

原因在于 float 和 double 类型都是使用IEEE754存储的浮点数,他们的有效位数分别是 7~8 和 15~16,而 int 的最大值的有效位则有10位,long 则长得多了,在有效位上必然导致数据失真/四舍五入。

浮点数还存在的问题:浮点数虽然可以表示很大的数,但是在精度上只能表示近似值,如0.1,尤其不适合货币等计算。而且由于 float 和 double 的存储方式不一样,可能我们看的同一个数实际上却表示的不一样。如:

System.out.println(0.1);	//0.100000024
System.out.println(0.1F);	//0.09999999999999998
System.out.println(0.1 == 0.1F);	//false
数据类型转换的衍生 – 表达式类型提升(隐式强制转换)

正常按照自动类型转换的规则,需要注意的有以下两点:

1.String类型有拼接运算,所有参与拼接运算的类型,最后表达式结果都为String。

int a = 10;
double b = 20;
String c = "abc";
//不同的运算顺序会产生不一样的结果,根据右结合性原则,先做加法则得到加法结果,先拼接运算则直接得到拼接的字
//符串
String result = a + b + c;	//30abc
String result = a + c + b;	//10abc20

2.仅由char/byte/short参与运算的表达式,其结果都为int。

char c1 = 'a';
char c2 = 'b';
int result = c1 + c2;	//char类型由其编码值参加运算,所以char也属于数值类型(注:基本数据类型中只有							//Boolean不属于)
//char result = c1 + c2;	//报错:其值为int

byte b1 = 1;
int result2 = c1 + b1;
//byte result2 = c1 + b1;	//报错:其值为int

short s1 = 2;
int result3 = b1 + s1;
//short result3 = b1 + s1;	//报错:其值为int
表达式
三元运算符 和 if…else…

三元运算符 和 if…else… 都是表示选择,但是 三元运算符 只能由表达式构成且返回一个值,因为其本身就是一个表达式,而 if…else… 可以写语句,三元运算符更为简洁,能用三元运算符则优先使用。可以理解为有更高需求时就出现了if …else…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值