关闭

自动、强制类型转换 | 变量作用域 | java初学笔记 新手理解

标签: java
249人阅读 评论(0) 收藏 举报
分类:

一 、自动类型转换(隐式转换)
自动类型转换时不需要程序员去手动进行的,但是需要满足两个条件才会进行。
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=(bytea+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、相同名称可以放在同级代码块下,不会有冲突。放在上面则会造成一人专政,导致错误。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Java数据类型的转换:隐式(自动)转换与强制转换

原文链接:http://java.chinaitlab.com/base/725590.html 一些初学JAVA的朋友可能会遇到JAVA的数据类型之间转换的苦恼,例如,整数和float,doubl...
  • u011240877
  • u011240877
  • 2015-08-17 10:09
  • 10095

你真的搞明白Java中基本数据类型的转换了吗?

写这篇博客源于在进行长连接通信的时候我们需要将流数据和我们的String、基本类型的数据之间进行转换,我们知道byte[]与String之间的转换相当方便,那么接下来我们就要弄懂byte[]与基本数据...
  • zhengzechuan91
  • zhengzechuan91
  • 2016-01-07 16:30
  • 2104

php 的数据强制类型转换和默认类型转换

1.只知道其然不知所以然 2.
  • samxx8
  • samxx8
  • 2014-07-02 12:24
  • 5617

C++学习笔记6--高级强制类型转换 命名空间和模块化编程 C预处理器 链接和作用域 函数模板 类模板 内联模板 容器和算法

静态对象强制类型转换
  • yglskfjmp
  • yglskfjmp
  • 2014-06-06 14:58
  • 654

C++对C语言的非面向对象特性扩充(3)--作用域运算符"::"&强制类型转换&运算符new和delete&引用

1.作用域运算符“::”     如果有两个同名变量,一个是全局的,一个是局部的,那么局部的变量在其作用域拥有较高的优先权,全局变量则被屏蔽。     那如果我希望在局部变量的作用域里使用全局变量...
  • yeshanghai_c
  • yeshanghai_c
  • 2012-11-15 22:05
  • 899

Java中super的限定作用和引用变量的强制类型转换

例子,可以限定调用父类被覆盖的实例 class BaseClass {  public int a = 5; } public class SubClass extends Base...
  • qq_17475155
  • qq_17475155
  • 2014-12-03 23:48
  • 1137

java 强制类型转换异常(ClassCastException)

  • 2010-06-18 16:23
  • 58KB
  • 下载

java 强制类型转换示例

  • 2010-06-21 16:27
  • 59KB
  • 下载

java多态机制理解以及强制类型转换(结合java与android)

多态性:张立国 刘伟的《Java SE程序设计》中提到,多态性的思想基础是—子类的对象可以代替父类的对象使用。(个人觉得这个机制应用于已经实例化的对象之间) 强制类型转换:(子类与父类之间的转换。个人...
  • u012478345
  • u012478345
  • 2015-01-18 01:33
  • 385

运算符,常量和变量,强制类型转换

一,运算符 一定注意=是赋值,==才是等于!!太容易搞混了。 表达式1?表达式2:表达式3 意思是1若为真,则执行2,否则执行3 二,常量和变量 常量:程序运行过程中,值不能改变的量 符号...
  • chablin_
  • chablin_
  • 2017-12-11 00:59
  • 21
    个人资料
    • 访问:6033次
    • 积分:325
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:1篇
    • 译文:0篇
    • 评论:5条
    最新评论