A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 芦青 中级黑马   /  2013-3-24 15:50  /  1948 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 芦青 于 2013-3-25 12:37 编辑

我在听毕老师的课程时,一直认为赋值运算符在做运算的时候都自动做了强制转换动作,
例如:
float x=3.13f;
我不明白的是:为什么float x=3.13不可以,我知道会损失精度,3.13默认是double类型的,但赋值运算的时候不是自动做了强转动作了吗?
比如:
x+=3.12;
这在做赋值运算的时候又做了强转动作,自动将double类型的3.12转成了float类型..
有高手能白话文点的介绍下吗?


评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

6 个回复

倒序浏览
x+=3.12;这句话是错的,必须这样写x+=3.12f;
3.12是double类型,不能赋值给float类型
java语言是强类型语言
java语言规定:范围小的可以赋值给范围大的,不能翻过来

给你查啦一下:你看看

首先我们要声明Java 语言强类型语言的重要性。确实,Java 的安全和健壮性部分来自于它是该类型语言这一事实。让我们看这意味着什么。首先,每个变量有类型,每个表达式有类型,而且每种类型是严格定义的。其次,所有的数值传递,不管是直接的还是通过方法调用经由参数传过去的都要先进行类型相容性的检查。有些语言没有自动强迫进行数据类型相容性的检查或对冲突的类型进行转换的机制。Java 编译器对所有的表达式和参数都要进行类型相容性的检查以保证类型是兼容的。任何类型的不匹配都是错误的,在编译器完成编译以前,错误必须被改正。

  注意:如果你有C或C++的背景,一定要记住Java对数据类型兼容性的要求比任何语言都要严格。例如,在C/C++ 中你能把浮点型值赋给一个整数。在Java 中则不能。另外,C语言中,在一个参数和一个自变量之间没有必然的强制的类型检查。在Java 中则有。起初你可能发现Java 的强制类型检查有点繁烦。但是要记住,从长远来说它将帮助你减少程序出错的可能性。 来

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
系统管理员 发表于 2013-3-24 16:04
x+=3.12;这句话是错的,必须这样写x+=3.12f;
3.12是double类型,不能赋值给float类型
java语言是强类型语言 ...

范围小的可以赋值给范围大的?
byte x=33;
33是int类型  它不是照样赋值给byte类型了..
回复 使用道具 举报
芦青 发表于 2013-3-24 16:11
范围小的可以赋值给范围大的?
byte x=33;
33是int类型  它不是照样赋值给byte类型了.. ...

那是我自己总结的,可能不准确
byte x=33; //正确
byte x=128;//错误
回复 使用道具 举报
系统管理员 发表于 2013-3-24 16:04
x+=3.12;这句话是错的,必须这样写x+=3.12f;
3.12是double类型,不能赋值给float类型
java语言是强类型语言 ...

x += 3.12;   这句错了???
  1. float  x = 0;
  2. x += 3.12;   //正确
  3. x = x+3.12;  //错误
复制代码
x += 3.12;    这句是符合运算符,相当于  x =(float)x+3.12;
x = x+3.12;   这句只是简单运算符,所以不能这么写
回复 使用道具 举报
系统管理员 发表于 2013-3-24 16:25
那是我自己总结的,可能不准确
byte x=33; //正确
byte x=128;//错误

byte x=33; //正确
byte x=128;//错误

byte x=128 假设运算符确实能强制转换吧, 把int类型的128强转成byte类型,但超出byte的取值范围会报错的..
我简单点说下我想表达的意思:
如果说赋值运算符可以完成强制转换:下面2个代码你看下:

byte x=33; 通过
如果赋值运算符真的把int类型的数据自动强制转换成了byte类型
float f=33.3;失败
如果赋值运算符真的做了自动强制转换动作,为什么没有把double类型的数据转成float类型

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
贾文泽 发表于 2013-3-24 16:36
x += 3.12;   这句错了???x += 3.12;    这句是符合运算符,相当于  x =(float)x+3.12;
x = x+3.12; ...

嗯,是的!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马