疯狂Java笔记:3.5 基本类型转换

3.5.1 自动类型转换

  • 定义:Java 所有数值型变量可以相互转换,若系统支持将A类型的值直接赋给B类型变量,称为自动类型转换
  • 表数范围小的数值或变量直接赋值给表数范围大的变量时系统会自动类型转换,否则需要强制转换
  • 任何基本类型和字符串值进行连接运算时,基本类型值自动转换为字符串类型
    • byte->short->int->long->float->double
    • char->int
package jwz;
/**
 * 基本类型的自动类型转换
 */
public class TypeConversion{
    public static void main(String[] args) {
        int a=6;
        float f=a;//int自动转换成float类型
        System.out.println(a+"\t"+f);

        byte b=9;
        double d=b;//byte自动转换为double
        // char cc=b;//无法转换,出错->char只能和int相互转换
        System.out.println(b+"\t"+d);

        char c='A';
        double dd=c;//char转换为int,int自动转换为double
        System.out.println(c+"\t"+dd);

        // String str1=d;//double不能直接赋值给String
        String str=d+"_str";//与字符串连接时自动转换为字符串String
        System.out.println(str);

        // 结合顺序不同造成的类型转换结果不同
        System.out.println("Hello"+3+4);
        System.out.println(3+4+"Hello");
        System.out.println("Hello"+'a'+4);
        System.out.println('a'+4+"Hello");
    }
}

3.5.2 强制类型转换

  • 例如:int b;short a=(short) b;
  • 强制类型转换可能造成溢出,从而数据丢失
  • 可通过基本类型的包装类实现将字符串转换成对应基本类型
package jwz;
/**
 * 基本类型的强制类型转换
 */
public class TypeConversion{
    public static void main(String[] args) {
        int iValue=128; // 二进制表示形式:10000000
        byte bValue=(byte)iValue;//int强制转换为byte,截断前8位,首位成为符号位,变成负数,该现象为溢出
        System.out.println(bValue);

        double dValue=3.98;
        int dToi=(int)dValue;//double强制转换为int,取整数部分
        System.out.println(dToi);
    }
}
  • 练习题目:网页随机验证码的实现
    /**
     * 网页随机验证码的实现:生成随机字符串
     */
    public static void randomStr(){
        String result="";
        for(int i=0;i<6;i++){
            // 加65转换成大写
            int intValue=(int)(Math.random()*26+65);
            result+=(char)intValue;
        }
        System.out.println(result);
    }

3.5.3 表达式类型自动提升

算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。
- 所有 byte/short/char 类型提升到 int
- 整个式子类型提升到表达式中最高等级操作数的类型。

package jwz;
/**
 * 表达式类型自动提升
 */
public class AutoPromote{
    public static void main(String[] args) {
        short sValue=5;
        //表达式值自动提升为int类型,int赋值给short,出错
        // sValue=(sValue-2);
        // 通过强制类型转换即可赋值
        sValue=(short)(sValue-2);

        //byte、short、char->int;
        //表达式最后结果保持表达式中最高等级类型double
        byte b=40;
        char c='a';
        int i=23;
        double d=.314;
        double result=b+c+i*d;
        System.out.println((int)b+"\t"+(int)c+"\t"+d+"\t"+(i*d)+"\t"+result);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值