首页 > 试题广场 >

Java类Demo中存在方法func1、func2、func

[不定项选择题]
Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )
public class Demo{

  float func1()
  {
    int i=1;
    return;
  }
  float func2()
  {
    short i=2;
    return i;
  }
  float func3()
  {
    long i=3;
    return i;
  }
  float func4()
  {
    double i=4;
    return i;
  }
}

  • func1
  • func2
  • func3
  • func4
这道题考的是数据类型转换问题。由大到小需要强制转换,由小到大不需要。
A:return;   没有返回值,错误
B:short → float 无须强制转换,正确

C:long → float  无须强制转换(这个最选项容易出错),正确。

float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。
浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的
第1位,符号位,即S
接下来8位,指数域,即E。
剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)
然后按照公式 V=(-1)^s * M * 2^E
也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大

D:double → float 没有强制转换,错误
编辑于 2016-08-04 00:39:37 回复(39)

数据类型的转换,分为自动转换和强制转换。自动转换是程序在执行过程中 悄然 进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换;强制类型转换则必须在代码中声明,转换顺序不受限制。

自动数据类型转换

自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
--------------------------------------------->
byte,short,char-> int -> long -> float -> double

运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

操作数 1 类型

操作数 2 类型

转换后的类型

byte short char

int

int

byte short char int

long

long

byte short char int long

float

float

byte short char int long float

double

double

强制数据类型转换

强制转换的格式是在需要转型的数据前加上 “( )” ,然后在括号内加入需要转化的数据类型。有的数据经过转型运算后,精度会丢失,而有的会更加精确

我的Github ^_^ (欢迎follow): https://github.com/CircleZ3791117
编辑于 2018-02-09 15:42:47 回复(21)
java有八种基本数据类型分别是六种数字类型(四种整数型,俩种浮点类型)一种布尔型,还有一种字符类型。
byte, short, int, long, float, double, boolean, char

发表于 2019-05-05 08:20:17 回复(0)
多一个func0,我只能说nb。。。
发表于 2019-01-07 17:20:11 回复(0)
D错了为什么c对着?
编辑于 2016-05-20 11:44:55 回复(0)
今天才知道原来long到float不用强转,因为float表示的范围确实比long表示的范围大,虽然它只占4个字节,而long占8个字节
涨知识了
发表于 2016-06-18 19:15:09 回复(18)

小转大不用强转,大转小需要强转
发表于 2016-04-07 12:12:33 回复(9)
byte short char int long float double 1 2 2 4 8 4 8 低到高自动转换,高到底强制转换,例如黄种人肯定是人类,到人类却不一定是黄种人
发表于 2016-07-04 11:18:28 回复(2)
fun1()
存在错误,return;
这个函数需要一个float作为返回值,但是函数没有返回float。
发表于 2016-04-09 16:02:41 回复(1)
float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。
浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的
第1位,符号位,即S
接下来8位,指数域,即E。
剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)
然后按照公式 V=(-1)^s * M * 2^E
也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大,所以  long类型 可以 隐式 转为float类型。
发表于 2017-04-14 22:53:27 回复(2)
转换原则 : byte ->short(char)->int->long->float->double

编辑于 2019-10-21 17:03:54 回复(2)
由大到小需要强制转换,由小到大不需要;
小------------------------大  
byte,short,char > int > long > float > double
发表于 2016-10-02 18:10:34 回复(0)
数据类型转换,遵循一个原则:范围小的转到范围大的自动进行转换,范围大的转为范围小的要进行强制类型转换
发表于 2016-06-23 20:35:24 回复(0)
考的是JAVA基本数据类型的转换。从小的转为大的不会报错;由大的转为小的会报错。对于浮点型数据,其内存中的表示跟整型不一样。所以float虽然是4字节,看起来比long(8字节)小,但浮点型表示整型时比long能表示的整数大的多。(比较复杂,有兴趣的可以百度下)
发表于 2016-04-09 22:00:08 回复(2)
求解答
发表于 2016-04-09 09:07:20 回复(0)
很多人应该都是错选了C选项,我也是。

64位的long转换成32位的float不需要强制类型转换。

long 型在32位下,长度为4字节,表示范围为-2147483648~2147483647
在64位下为8字节,范围为-9223372036854775808~9223372036854775807
也就是9.2E18
而float 范围是 -3.4E-38 和 3.4E+38
明显,不论哪种long数据转为float的时候都不存在溢出的情况,唯一问题就是精度丢失。
所以 long转为float就是按值转换,通过降低精度的方式,把值赋值给float。



发表于 2021-12-21 17:07:03 回复(0)
short i =2 此时不应该是int类型的2赋值给short吗?不会产生精度损失吗?
发表于 2019-10-27 20:40:03 回复(0)
数据类型转换:
自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
低 ---------------------------------------------> 高
byte,short,char-> int -> long -> float -> double
其中虽然float占4个字节,long占8个字节,因为底层的实现方式不同,float大于long

编辑于 2019-03-25 16:11:08 回复(0)
浮点数表示的范围大,虽然float在java中占4个字节,long型占8个自己,但是float表示long还是绰绰有余的,选项C get到了√
发表于 2016-08-25 12:09:33 回复(0)
A为毛是错的啊
发表于 2016-05-19 14:21:10 回复(5)