JAVA中类型转换

一:java中类型转换图

备注:

1.默认整型为 int

2.默认浮点型 double

public static void main(String[] args) {
        long a = 10000000000; //编译出错: The literal 10000000000(默认是int 范围出界) of type int is out of range 
        long b = 10000000000L; //编译正确(改变默认 末尾加L)
        int c = 1000;
        long d = c;
        float e = 1.5F;
       <span style="white-space:pre">	</span>double f = e;(默认是double)
  }
3.由于范围的问题 byte不能自动提升到char ,char不能自动提升到short

二:隐含类型转换与强制类型转换

隐含类型转换

1.将一个范围较小的类型赋值给范围大的类型,jvm自动在编译时进行类型提升

2.将一个范围较大的类型赋值给范围小的类型N

case 1:默认为int   超过当数值范围N时编译出错,此时你需要强制类型转换

低于数值范围N时,隐式转换为类型N(虚线处)

public static void main(String[] args) {
     byte a = 1000;   // 编译出错 Type mismatch: cannot convert from int to byte
     float b = 1.5;   // 编译出错 Type mismatch: cannot convert from double to float
     byte c = 3;      // 编译正确
   }
强制类型转换


public static void main(String[] args) {
        byte p = 3; // 编译正确:int到byte编译过程中发生隐式类型转换
       <span style="white-space:pre">	</span>int  a = 3;
        byte b = a; // 编译出错:cannot convert from int to byte
         byte c = (byte) a; // 编译正确
         float d = (float) 4.0;
     }

三:float及double运算(float和double只能用来做科学计算或者是工程计算; 在商业计算中我们要用java.math.BigDecimal

四:经典题目分析

Q1:short s1 = 1;  s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。

对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。

Q2:if(userName.equals("hh")){}问题?

当userName为null 时 报空指向异常,改为"hh".equals(userName)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值