J数据类型

目录

数据类型

Java的数据类型分为两大类

基本类型(八大基本类型)

引用类型(reference type)

类型转换

数据类型扩展

运算规则

1.计算结果的数据类型,与最大数据类型一致

2.byte,short,char三种比int小的整数,运算时会先自动转换成int

3. 整数运算溢出

4.现象: 浮点数运算不精确

5.现象:浮点数的特殊值


数据类型

  • Java是一种强类型语言

    • 要求变量的使用要严格符合规定,所有的变量都需要先定义才能使用

  • 弱类型语言

    • 要求变量的使用符合规定

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。 java是一个强类型的语言,会把日常见到的数据,分成好多类型. 内存管理系统根据变量类型来分配存储空间,分配的空间只能用来储存该类型数据。 常用的转换关系: 位 bit,来自英文bit,音译为“比特”,表示二进制位。 1 Byte = 8 Bits (1字节 = 8位) 1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB

Java的数据类型分为两大类

基本类型(八大基本类型)

1.整数类型

  • byte 占1个字节范围:-128-127 2^18-1 ------2^1*8-1

  • short占2个字节范围:-32768-32767

  • int占4个字节范围:-2147483648-2147483637

  • long占8个字节范围:-9223372036854775808-9223372036854775807

  • byte num1 = 10;
    shrot num2=20;
    int num3 = 30;//最常用
    long num4 = 30L;//Long类型要在数字后面加个L

2.浮点数类型

  • float占4个字节

  • double占8个字节

  • float num5=50.1F;//faoat类型要在数字后面加个F
    double num6 =3.1415926;

3.字符类型

  • char占2个字节

  • char num7='A';//赋值时只能给一个英文字母或者一个中文字
    //字符串
    String num8="你好世界";//String不是关键字,是类

4.boolean类型

  • 占1位其值只有false 和true

八大基本类型速查表

查看基本类型的最大值和最小值代码

package cn.tedu.basic;
/**
 * 本类用于查看基本类型的最大值与最小值
 * Ctrl+Alt+向下键 快速向下复制一行
 */
public class TestTypeScope {
    //必须要写入口函数,否则代码无法执行,因为没有入口
    public static void main(String[] args) {//入口函数
        //进行整形类型的测试 byte1 short2 int4 long8
        //1.定义变量,用变量分别保存最大值与最小值
        //定义变量 数据类型 变量名 变量值 Ctrl+Alt+向下键 快速向下复制一行 换位置:Alt+方向键
        /**JAVA提供了对应的基本类型的工具箱*/
        byte byteMax = Byte.MAX_VALUE;
        byte byteMin = Byte.MIN_VALUE;
        System.out.println("byte类型的最大值是:"+byteMax);//127
        System.out.println("byte类型的最小值是:"+byteMin);//-128
    
        short shortMax = Short.MAX_VALUE;
        short shortMin = Short.MIN_VALUE;
        System.out.println("short类型的最大值是:"+shortMax);//32767
        System.out.println("short类型的最小值是:"+shortMin);//-32768
        
        int intMax = Integer.MAX_VALUE;
        int intMin = Integer.MIN_VALUE;
        System.out.println("int类型的最大值是:"+intMax);//2147483647
        System.out.println("int类型的最小值是:"+intMin);//-2147483648
        
        long longMax = Long.MAX_VALUE;
        long longMin = Long.MIN_VALUE;
        System.out.println("long类型的最大值是:"+longMax);//9223372036854775807
        System.out.println("long类型的最小值是:"+longMin);//-9223372036854775808
        
        //浮点型测试 float double
        //1.4E-45(1.4乘以10的负45次方)
        float floatMax = Float.MAX_VALUE;
        float floatMin = Float.MIN_VALUE;
        System.out.println("float类型的最大值是:"+floatMax);//3.4028235E38
        System.out.println("float类型的最小值是:"+floatMin);//1.4E-45
        
        double doubleMax = Double.MAX_VALUE;
        double doubleMin = Double.MIN_VALUE;
        System.out.println("double类型的最大值是:"+doubleMax);//1.7976931348623157E308
        System.out.println("double类型的最小值是:"+doubleMin);//4.9E-324
        
        //布尔型boolean true真 false假
        boolean b1 = true;
        boolean b2 = false;
        
        //字符型char
        char c1 = 'a';//可以保存一个字符
        char c2 = 97;//可以保存一个数字
        char c3 = '中';//可以保存一个汉字
        //char类型可以存数字,但是在打印时,会去查ASCII码表,把数字对应的字符拿出来使用
        //ASCII码表值规定了数组0-127对应的字符,128-65535默认按照字符?来处理
        System.out.println(c1);//a
        System.out.println(c2);//a
        System.out.println(c3);//中
    }
}

引用类型(reference type)

  • 引用类型是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,

  • 所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组....

类型转换

  • 由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换

    低----------------------------------------------------------->高

    byte->short->char->int->long->float->double

    为什么小数比整数高,因为小数的优先级一定大于整数

    整型与浮点型底层存储的结果就不一样

    浮点型底层是采用科学计数法来存储数据的,取值范围非常大,所以类型能否转换看的是取值范围

  • 运算中,不同类型的数据先转化成为同一类型,然后进行计算

  • 强类型转换

  • 自动类型转换

自动类型转换(小转大,隐式转换)

byte m = 120;
int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
float f = 3.2f; double d = f; -->可以执行

强类型转换(大转小,显示式转换)

容量大的类型转换为容量小的类型时必须使用强制类型转换。

格式:小变量类型 小变量名 = (小变量类型)大变量名

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

注意

  • 转换过程中可能导致溢出或损失精度 例如:int i =128; byte b = (byte)i; //打印的结果是-128 因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入 例如:float f = 32.7f; int a2 =(int) f; //打印的结果是32

  • 不能对boolean类型进行类型转换。

  • 不能把对象类型转换成不相干的类型

经典的溢出问题

//常见的问题
        //操作比较大的数的时候,注意溢出问题
        //JDK7的新特性,数字之间可以用下划线分割(不会被输出)
        int money = 10_0000_0000;
        int years = 20;
        int total = money*years;//输出结果:-1474836480 ,本来改200_0000_00000;是因为int 最大是20亿。计算的时候溢出了
        System.out.println(total);
        long total2 =money*years;// 输出结果:-1474836480,以为long给的是转换后的类型,而这里转换前就出问题了
        System.out.println(total2);
        long total3 = money*(long)years;//输出结果:200_0000_00000 结果对了      因为先把一个数转换成为了Long
        System.out.println(total3);
        //  L l(有些地方会把小写的l当成1)

数据类型扩展

整数扩展

 //整数扩展  进制      二进制0b     十进制     八进制0     十六进制0x
        int a = 10;
        int b = 010;
        int c = 0b10;
        int d = 0x10;
        System.out.println(a);//10
        System.out.println(b);//8
        System.out.println(c);//2
        System.out.println(d);//16

浮点数扩展

  • 面试题:银行业务怎么表示?

    不用浮点数进行表示,用BigDecimal(数学工具类)

  		float F = 0.1F;
        double D = 1.0/10;
        System.out.println(F==D);//false
        System.out.println(F);
        System.out.println(D);
        float F1=123456789F;
        float F2=F1+1;
        System.out.println(F1==F2);//true
        //上面的结果为什么不一样
        //因为 浮点数表示的字长是有限的也是离散的,浮点数会舍入误差(没办法精确的表示),结果只能是一个大约数,接近但不等于
        //最好完全避免浮点数进行比较

字符扩展

 char c1 ='a';
        char c2 ='中';
        System.out.println(c1);
        System.out.println((int)c1);//讲字符串类型转换为int类型:   强制转换
        System.out.println(c2);
        System.out.println((int)c2);

        //所有的字符本质还是数字
        //char会涉及到  编码  问题
// 编码里有一个  Unicode编码(可以处理各种语言的文字)  占2个字节   最多可以表示65536个字符 2^16=65536(现在不止这些)
        // Unicode 里面有一个表   表里面有定义(eg:97=a  65=A)
        //会通过Unicode 的编码 用过转义来表示    U0000----UFFFF1
        char c3 ='\u0061';
        System.out.println(c3);//a

布尔值扩展

  // 布尔值扩展
        boolean b1=true;
        if (b1==true){System.out.println("123");}
        if (b1){System.out.println("123");}//两个相等
        //Less is more ! 代码要精简易读

运算规则

1.计算结果的数据类型,与最大数据类型一致

package poerator;

public class Basics0702 {
    public static void main(String[] args) {
        long a = 123456789L;
        int  b = 123;
        short c =10;
        byte d = 8;
        System.out.println(a+b+c+d);//123456930 Long类型   两个操作或者多个操作中 有一个数为long 那么结果一定是Long类型
        System.out.println(b+c+d);// 141       	int类型      两个操作或者多个操作中 没有一个数为long 那么结果都为int类型
        System.out.println(c+d);//   18        	int类型      无论是不是有int类型
        System.out.println(3/2);//1,int/int,得到的结果类型还是int
		System.out.println(3/2d);//1.5,int/double。得到的结果是double	
    }
}

2.byte,short,char三种比int小的整数,运算时会先自动转换成int

byte a = 1;
byte b = 2;
byte c = (byte)(a+b);
//a+b会自动提升成int类型,右面得运算结果就是int大类型
//给左面的byte小类型赋值,不可以,需要强转。

3. 整数运算溢出

/*整数运算,类似于一个钟表,转到最大时,再转会回到最小。
计算:光速运行一年的长度是多少米?3亿m/s*/
//溢出的现象:
//因为做了大的整型数据的运算,会超出int取值范围。解决方法:把整数提升成long类型。
System.out.println(300000000L * 60 * 60 * 24 * 365);

4.现象: 浮点数运算不精确

System.out.println(1-0.8); 

5.现象:浮点数的特殊值

System.out.println(3.14/0); //Infinity 无穷大 3.14/0
System.out.println(0/0.0 );//	NaN not a number  不是个数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值