自动、强制类型转换 | 变量作用域 | java初学笔记 新手理解
2017-08-02 14:26
489 查看
一 、自动类型转换(隐式转换)
自动类型转换时不需要程序员去手动进行的,但是需要满足两个条件才会进行。
1、两种数据类型彼此兼容
2、目标类型取值范围大于源类型的取值范围
列出三种自动类型转换的情况
1、byte→short→int→long
2、byte、short、int、char→float
3、byte、short、int、long、char、float→double
小类型转换成大类型虽然不会出现数据丢失,但可能会出现精度丢失。
例如
分别输出i和f的十进制和二进制结果
得到的结果是
可以发现精度是出现误差的
二、强制类型转换(显示转换)
当需要把大类型的数据转入小类型内就需要进行强制类
这是错误的,因为a的取值范围超过了byte的取值范围,所以要进行强转,格式如下
当byte类型的值和另外一个数相加再赋给byte的时候也需要进行强转。java无法判断b的值是多少,并且java在进行整数运算时默认是按照int类型进行的,即使这个数没有超过byte最大值。
强转后
三、变量作用域
作用域就是变量在哪个范围内有效,就是一对大括号括起来的范围
这一段代码中,x的作用域是第一个花括号内的范围,y的作用域是第二个花括号的范围,当超出第二个花括号以后再调用y变量,是找不到的(这是因为java虚拟机已经将他回收了)。
这样是没有错误的,因为x=5中,这个x的作用域是第二个花括号,如果出了作用域是会被jvm自动回收的,而x=4已经出了第二个花括号,所以相当于只有一个x变量,不存在冲突。
这样就不行了,因为x=4的这个变量的范围是整个的main方法,而x=5则是在x=4的作用域内,这时就会出现错误。
总结:
1、自动转换通俗的说,把小杯子中的水倒进大杯子里,这个命令是可以被你的仆人执行的,你不需要说他也会这么做。强制类型转换是把大杯子中的水倒进小杯子里,仆人必须得到你的命令才会这么做,并且这么做了之后小杯子中的水可能会装不下大杯子中的水,从而流出来。这就是通常说的数据丢失
2、相同名称可以放在同级代码块下,不会有冲突。放在上面则会造成一人专政,导致错误。
自动类型转换时不需要程序员去手动进行的,但是需要满足两个条件才会进行。
1、两种数据类型彼此兼容
2、目标类型取值范围大于源类型的取值范围
列出三种自动类型转换的情况
1、byte→short→int→long
2、byte、short、int、char→float
3、byte、short、int、long、char、float→double
小类型转换成大类型虽然不会出现数据丢失,但可能会出现精度丢失。
例如
int i=0x1000001; float f=i;
分别输出i和f的十进制和二进制结果
得到的结果是
16777217:::1000000000000000000000001 1.6777216E7:::1000000000000000000000000
可以发现精度是出现误差的
二、强制类型转换(显示转换)
当需要把大类型的数据转入小类型内就需要进行强制类
int a=2; byte c=a+2;
这是错误的,因为a的取值范围超过了byte的取值范围,所以要进行强转,格式如下
byte c=(byte)a+2;
当byte类型的值和另外一个数相加再赋给byte的时候也需要进行强转。java无法判断b的值是多少,并且java在进行整数运算时默认是按照int类型进行的,即使这个数没有超过byte最大值。
byte b=5; byte a=b+5;
强转后
byte b=5; byte a=(byte)b+5; //转换的格式如下 //目标类型 变量=(目标类型) 值 //byte b=(byte) null;
三、变量作用域
作用域就是变量在哪个范围内有效,就是一对大括号括起来的范围
public static void main (String [] args){ int x=4; { int y=9; } }
这一段代码中,x的作用域是第一个花括号内的范围,y的作用域是第二个花括号的范围,当超出第二个花括号以后再调用y变量,是找不到的(这是因为java虚拟机已经将他回收了)。
public static void main (String [] args){ { int y=9; int x=5; } int x=4; }
这样是没有错误的,因为x=5中,这个x的作用域是第二个花括号,如果出了作用域是会被jvm自动回收的,而x=4已经出了第二个花括号,所以相当于只有一个x变量,不存在冲突。
public static void main (String [] args){ int x=4; { int y=9; int x=5; } }
这样就不行了,因为x=4的这个变量的范围是整个的main方法,而x=5则是在x=4的作用域内,这时就会出现错误。
总结:
1、自动转换通俗的说,把小杯子中的水倒进大杯子里,这个命令是可以被你的仆人执行的,你不需要说他也会这么做。强制类型转换是把大杯子中的水倒进小杯子里,仆人必须得到你的命令才会这么做,并且这么做了之后小杯子中的水可能会装不下大杯子中的水,从而流出来。这就是通常说的数据丢失
2、相同名称可以放在同级代码块下,不会有冲突。放在上面则会造成一人专政,导致错误。
相关文章推荐
- java学习笔记(常量 二进制 其他进制 负数进制 变量 自动类型提升 强制类型转换 )
- 初学JAVA 笔记 7月14号 注释 标识符 关键字 数据类型 变量 运算符
- Java初学笔记(一)变量及其内存机制
- 【慕课笔记】第二章 变量和常量 第8节 JAVA中的强制类型转换
- 对Java中变量作用域理解
- Java_web初学笔记之<MyEclipse自动提示设置 空格和等号不补全>
- 变量数据类型 | java初学笔记
- 工作笔记:ajax json 同一jsp页面中,把java变量赋给js变量,如果java变量字符串符合json格式,则赋给js变量时,js变量会自动的变为json对象
- 深入理解Java虚拟机笔记---volatile变量的特殊规则
- java中变量作用域的理解
- Java基础知识笔记(七:接口、变量作用域和参数传递)
- Java 自己新手的笔记。Final的理解;
- 初学入门:JAVA里字符编码的探索与理解
- Java初学者必看:Java自动设置环境变量
- Effective Java(2nd Edition) Item 45 最小化局部变量的作用域(译文)
- 初学入门:JAVA里字符编码的探索与理解
- java 环境变量自动设置 注册表方法
- 自动配置JAVA环境变量
- Java自学笔记之细说环境变量的设置
- java初学碰到的两个问题:win xp下环境变量设置细节 和 变量的初始化问题