java int 赋值_Java整数赋值时默认为int引发的问题

众所周知,Java中有八个基本数据类型。分别是 boolean  char byte short int long float double,所占的字节数和范围如下:

java基本数据类型

Type

Class

Bits

Bytes

Mix

Max

Range

boolean

Boolean

2

false

true

(0,1)

char

Character

16

2

0

2^16 -1

0 ~ 65535

byte

Byte

8

1

-2^7

2^7 - 1

-128 ~ 127

short

Short

16

2

-2^15

2^15 - 1

-32768~32767

int

Integer

32

4

-2^31

2^31-1

-2147483648~2147483647

long

Long

64

8

-2^63

2^63 - 1

-9223372036854775808~

9223372036854775807

float

Float

32

4

1.4E-45

3.4028235E38

double

Double

64

8

4.9E-324

1.7976931348623157E308

其中,当我们进行赋值时

若是整数则默认为int类型

例如: char a = 127;

这个数127在赋值前默认为int类型,然后隐式转换为char类型

若是浮点数则默认为double

例如: float f = 1.0;

这个数1.0在进行赋值操作前是double,然后隐式转换为float类型

今天遇到了两个由问题

问题一:   运行以下代码

package com.test

public class Test{

public static void main(String[] args){

long micros_per_day = 24 * 60 * 60 * 1000 * 1000;

long millis_per_day = 24 * 60 * 60 * 1000;

System.out.println(micros_per_day / millis_per_day); // 得出结果为5

}

}

得出的结果为5 ,??? 什么情况,是我数学不好吗???不应该是1000吗???

查遍资料终于得到了结论

整数在赋值时默认为int

long micros_per_day = 24 * 60 * 60 * 1000 * 1000;

这条语句在执行时先将这个数算出,然后默认转换为int类型,再将int类型转换为long类型,执行了3步

在赋值时,因为这个数大于int的最大值,所以结果溢出,得到的不是86400000,而是500654080

如何解决?

赋值时将int强制转换为long

即将上述语句转换为

long micros_per_day = (long) 24 * 60 * 60 * 1000 * 1000;

这样得出的结果为1000

这里涉及的知识点有

1. 整数在赋值时默认类型为int

2. 隐式类型转换:精度低的转换为精度高的

问题二:

输出下列语句的结果:

System.out.println("(int)(char)(byte)-1");

输出结果: 65535

这是一道面试题,考的是对基本类型的掌握。这道题解题题眼在char的范围是0~65535

结论是:

/*

*    (int)(char)(byte)-1

*    执行步骤:

*        1. 开始-1为int类型,原因是所有的整数类型默认为int型

*        2. -1 由int类型转换为byte类型的-1

*        3. byte类型的-1转换为char类型,由ascii表可得到-1不在表示范围,

*           因为char默认占两个字节,即16bit,所能表示的范围为0 - 65535

*           把-1转换为char,然后从后面开始找,得到65535

*        4. char类型的65535转换为int类型的65535

*/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值