在学习Java变量与数据类型时,经常遇到一些与其它语言不同或与现实生活不同,易混地方,我在这里做一个总结与整理。
变量的初始化
在Java中声明的变量如未进行过初始化或赋值,就不占据存储空间,是不能够使用的,这不同于VB等语言会自动初始化,赋默认值。如:
class Demo{
public static void main(String[] args){
int i;
System.out.println(i);//i未初始化
}
}
输出结果:
变量的作用域(大括号,括号内定义的变量不能在括号外使用)
比较代码:
class range1{
public static void main(String[] args){
int i=10;
System.out.println(i); //i在作用域(大括号)内
}
}
错误代码:
class Demo{
public static void main(String[] args){
{
int i=10;
}
System.out.println(i); //变量i己出了作用范围(大括号)因此编译出错。
}
}
边界运算-强转后高位截取 损失精度
class Overrange{
public static void main(String[] args){
byte b1=(byte)(127+1);
//输出结果-128 不强转为00000000 10000000转为byte后为10000000(-128)
}
}
整型除法 注意数据类型取值范围
当整型与整型数据相除时结果仍为整数:
class Integerdiv{
publci static void main(String[] args){
int i=3/5*5;
//按我们习惯为3,但分析一下3/5为int型0再*5结果为0
//我们可使用 double i=3.0/5*5 扩展表示范围来得到正确的数据
}
}
求模运算(%)中符号取值与左边的数相同
在求模运算中当遇到带有负数运自的求模时如何确定求模后的正负呢:只要通过左边的数即可确定。如:
class Intmod{
public static void main(String[] args){
System.out.println(-6%5); // 结果-1
System.out.println(6%-5); //结果1
System.out.println(-6%-5); //结果-1
}
}
+=,-=,*=,/=,%=内部实现自动强制转换
如:
byte b1 = 100;
b1+=28; //编译通过
因此说明 b1+=28;<==>b1 = (byte)(b1+28);自动进行了强制类型转换
JAVA中运算规则之整型运算结果最小是int类型解析
分析比较代码如下:
class Integerruls
{
public static void main(String[] args)
{
byte b0=3;
//byte b1=b0+1; //编译出错 整型运算结果最小是int类型
byte b1=3+1; //语法正确
int i0=0x7fffffff;
int i1=i0+1; //语法正确
System.out.println(i1);
}
}