Java(二)数据类型及转换

一、数据类型

数据类型分为

1.基础数据类型

2.引用数据类型(除了八个基础数据类型其他都是引用类型)

基础数据类型(八个)

1)按整数分 (4个)

(1)byte 字节

(2)short 短整型

(3)int 整型

(4)long 长整型

2)按小数分(2个)

(1)float 单精度浮点型 赋值时要在结尾处加f

(2)double 双精度浮点型 

3)按字符型(1个)

char 

4)按布尔(1个)

boolean 值为false或者ture

public class Demo01 {
    public static void main(String[] args) {
        
        //整数
        byte a=10;
        int num1=20;
        short num2=30;
        long num3=40L;//long 型要加数字结尾要加L
        //小数,浮点数
        float num4=50.1f;//float单精度浮点数要在数字后面加f
        double num5=23.456445656;
        //字符 单个字符
        char name='无';
        //字符串,String不是关键字,它是类
        //String Name="吴瑾黎";
        //布尔值
        boolean flag=true;
        boolean view=false;

    }
}

 数据类型拓展

public class Demo02 {
    public static void main(String[] args) {
        //整数拓展  进制    二进制0b   十进制  八进制0 十六进制0
        int i=10;
        int i2=010;//八进制0
        int i3=0x10;//十六进制0x  0~9  A~F 16
        System.out.println(i);
        System.out.println(i2);
        System.out.println(i3);
        System.out.println("=======================");
        //=====================================================================================
        //浮点数拓展?  银行业务怎么表示?钱
        //BigDecimal 数学工具类  比较的话最好用这个类,减少误差
        //=====================================================================================
        //float  有限 离散  舍入误差  结果就是一个大约数 接近但不等于
        //double
        //最好完全不使用浮点数进行比较
        float f=0.1f;
        double d=1.0/10;
        System.out.println(f==d);//false
        System.out.println(f);
        System.out.println(d);
        float d1=223232323232323232323f;
        float d2=d1+1;
        System.out.println(d1==d2);//true
        //=====================================================================================
        //字符拓展?
        //=====================================================================================
        char c1='a';
        char c2='中';
        System.out.println(c1);
        System.out.println((int)c1);//强制类型转换(type)这里是强制转换为int型
        System.out.println(c2);
        System.out.println((int)c2);//强制转换
        //所有的字符本质还是数字
        //编码 Unicode 占2个字节 可以表示0-65536个字符
    char c3='\u0061';
        System.out.println(c3);//根据Unicode表中c3是a
        //转义字符
        // \t  制表符
        // \n 换行
        System.out.println("Hello\tWorld");
        //
        String sa=new String("hello world");
        String sb=new String("hello world");
        System.out.println(sa==sb);//false 因为new是创建了一个新的字符池

        String sc="hello world";
        String sd="hello world";
        System.out.println(sc==sd);//true  他们的地址在一个字符池

        //布尔值扩展
        boolean flag=true;
        if(flag==true){}//新手的写法
        if(flag){}//两种形式是相等的 老手的写法
        //Less is More 代码要精简易读
    }


}

 运行结果:

10
8
16
=======================
false
0.1
0.1
true
a
97
中
20013
a
Hello	World
false
true

二、类型转换

1.强制转换

public class Demo03 {
    public static void main(String[] args) {
        int i=128;
        byte b=(byte) i;/*这个就是强制转换(内存溢出)由于byte最大是127,
        128超出范围导致溢出,*/
        System.out.println(i);
        System.out.println(b);
        //强制转换(类型)变量名
        //自动转换 低--高
        int ii=128;
        float bb= ii;
        System.out.println(ii);
        System.out.println(bb);
        /*
        注意:
       1.不能对布尔值进制转换
       2.不能把对象类型转换为不相干的类型
       3.在把高容量转换到低容量的时候,强制转换
       4.转换的时候可能存在内存溢出,或者精度问题!
                */
        System.out.println("==================");
        System.out.println((int)23.7);//结果23,存在精度误差
        System.out.println((int)-45.89f);//结果-45,存在精度误差
        System.out.println("==================");
        char c='a';
        int d=c+1;
        System.out.println(d);
        System.out.println((char)d);
    }
}

运行结果

128
-128
128
128.0
==================
23
-45
==================
98
b

2.自动转换

自动转换——底类型到高类型转换

//char ,int,short 《  long 《  float《  double 
public class Demo1{
 public void static main(String[] args){
//自动转换 低--高,float 比int类型高
//char ,int,short 小于long 小于float double 
        int ii=128;
        float bb= ii;
        System.out.println(ii);//128
        System.out.println(bb);//128.0


 }
}

数据类型可能存在的问题

1.溢出问题

2.精度问题

public class Demo04 {
    public static void main(String[] args) {
        //操作比较大的数时,考虑溢出问题
        //JDK新特性,数字之间可以用下划线进行分割
        int money=10_0000_0000;
        System.out.println(money);
        int years=20;//最多能达到20年
        int total=money*years;//-1474836480,计算的时候溢出了
        long total2=money*years;//计算的时候是以int算的当时已经出现问题了,所以后面不能在继续转换了
        System.out.println(total);
        System.out.println(total2);
        long total123=money*((long)years);
        //运用了强制转换,years被强制为long,然后是自动转换money是int会自动转换为long
        System.out.println(total123);//值正常出来了20000000000
        //自动转换

    //L l 因为 小写字母l像1 所以最好写成大写的L
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值