java原生类型_Java 基础 - 原生类型

更详细的说明,请参考: Java 原生类型与包装器类型深度剖析,https://blog.csdn.net/justloveyou_/article/details/52651211

一. 原生类型与包装器类型

1Byte = 8 Bits

a53eafa4e2622ff10217432a349c4b09.png

二. 自动转型与强制转型

精度(低1-高5)

1

byte(1字节)

Byte

short(2字节)

Short

char(2字节)

Character

2

int(4字节)

Integer

3

long(8字节)

Long

4

float(4字节)

Float

5

double(8字节)

Double

NA

boolean(未定)

Boolean

1、 自动转型

自动转型总原则:byte,short,char(同级)-> int -> long -> float -> double (由低精度到高精度)

1.1 由低精度到高精度的自动转换

具体可分为以下两种情形:

1)从位数低的类型向位数高的类型转换

byte b = 1;char c = 1;short s = 1;int i = 1;

c= b; //Error,同级

c = s; //Error,同级

s = c; //Error,同级

i = c; //OK

2) 从整型向浮点型的转换

int i = 1;long t = 1;float f = 1;double d = 1;

f= i; //Ok

f = t; //Ok

d = f; //Ok

1.2 运算符对基本类型的影响

具体可分为以下两种情形:

1) 当使用 +、-、*、/、%、==、>、< 等 等运算符对基本类型进行运算时,遵循如下规则:

两个操作数中,先考虑是否有一个是double类型的。如果有,另一个操作数和结果 将会被转换成double类型。再依次考虑float,long。除此之外,两个操作数(包括byte、short、int、char)都将会被转换成int类型。

byte b1 = 10 ; //OK,会检查发现10没有超过byte类型的最大值

byte b2 = 12; //OK,会检查发现12没有超过byte类型的最大值

byte b = b1 + b2; //Error,byte类型在计算时会自动提升为int类型,此时就会报错,因为b1+b2实际上是int类型,但是左侧的变量为byte类型。

short s1=1; //OK,会检查发现1没有超过short类型的最大值

s1=s1+1; //Error,因为s1+1 结果int,但左侧变量为 short,报错

s1++; //OK,不会报错,与s1=s1+1不同!!!,会检查发现2没有超过short类型的最大值

s1=1+1; //OK,1+1 是个编译时可以确定的常量,'+'运算在编译时就被执行了,而不是在程序执行的时候,这个语句的效果等同于s1=2

2) 当使用+=、-=、*=、/=、%=、i++、 ++i运算符对基本类型进行运算时,遵循如下规则:

运算符右边的数值将首先被强制转换成与运算符左边数值相同的类型,然后再执行运算,且运算结果与运算符左边数值类型相同。自增(减)运算也类似。

short s1=1; //OK,会检查发现1没有超过short类型的最大值

shorts2;

s1+=1; //OK,正确,1首先被强制转换为short型,然后再参与运算,并且结果也是short类型

s2= ++s1; //OK,正确,s2的值为2

2、强制转型

强制转换的格式是在需要转型的数据前加上 “( )”, 然后在括号内加入需要转化的数据类型。主要发生于以下两种情形:

由高精度向低精度转换

一种类型到另一种类型转换,则必须使用强制类型转化(同级之间:byte,short,char)

byte b = 3;int i = 3;long t = 3;float f = 3;char c = 3;short s = 3;

i= (int) f; //OK,由高精度向低精度转换

t = (long) f; //OK,由高精度向低精度转换

b = (byte) i; //OK,由高精度向低精度转换

i= b; //OK,由低精度向高精度转换,自动转型

System.out.println(c==s); //OK,true,c 和 s 自动转型为int,然后比较

b= (byte) s; //OK,一种类型到另一种类型转换

c = (char) b; //OK,一种类型到另一种类型转换

c = (char) s; //OK,一种类型到另一种类型转换

特别需要注意的是,强制转换常常会导致二进制位的截取,甚至会导致意想不到的结果:

int i = 128;byte b = (byte)i;

System.out.println(b);//-128(即-0)

---------------------

作者:书呆子Rico

来源:CSDN

原文:https://blog.csdn.net/justloveyou_/article/details/52651211

版权声明:本文为博主原创文章,转载请附上博文链接!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值