数据类型(以及一些扩展)

一、数据类型

  • 强类型语言:要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。(比较严谨,安全性更高,速度比较慢)

  • 弱类型语言

  • Java的数据类型分为两大类

    • 基本类型:四类八种

      1. 整数类型:byte、short、int、long

      2. 浮点数类型:float、double

      3. 字符类型:char

      4. 布尔类型:boolean

    • 引用类型

        //八大基本数据类型
​
        //整数
        int num1 = 10; //最常用
        byte num2 = 20;
        short num3 = 30;
        long num4 = 30L; //Long类型要在数字后面加个L
​
        //小数:浮点数
        float num5 = 50.1F;
        double num6 = 3.1415926;
​
        //字符
        char name = 'A';
​
        //布尔
        boolean b = true;
​

二、什么是字节

  • 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数。

  • 字节(byte):是计算机中数据处理的基本单位,习惯上用大B来表示。

  • 1B(byte字节)=8bit

  • 字符:是指计算机中使用的字母、数字、字和符号

  • 1bit表示1位

  • 1Byte表示一个字节1B=8b。

  • 1024B=1KB

  • 1024KB=1M

  • 1024M=1G


三、拓展

  • 整数拓展进制:

    • 二进制:0b 逢二进一

    • 十进制:逢十进一

    • 八进制:0 逢八进一

    • 十六进制:0x 逢十六进一

int i = 10;
int i2 = 010; //八进制0 输出8
int i3 = 0x10; //十六进制0x 0~9 A~F 输出16
  • 浮点数拓展:

银行业务表示钱使用BigDecimal数学工具类

//float:浮点数能表现的字长是有限的,是离散的,存在舍入误差,结果只能是一个大约数,只能是接近但不等于
//double
//最好完全避免使用浮点数比较
  • 字符拓展:

所有的字符本质还是数字

char c1 = 'a'; //97
char c2 = '中'; //20013
//编码 Unicode 占2个字节,最多可以表示65536个字符,最早的Excel也只有2的16次方也就是65536长
​
//Unicode编码形式:U0000 UFFFF
char c3 = '\u0061'; //a
​
//转义字符
// \t 制表
// \n 换行
​
//对象 从内存分析
String sa = new String("hello world");
String sb = new String("hello world");
sa == sb; //false 这是因为每new一次,都会在堆中创建一个新的字符串,而对于引用类型,==比较的是地址值,所以结果当然是flase了
​
String sc = "hello world";
String sd = "hello world";
sc == sd; //true 这是因为hello world为字符串常量,存在常量池当中,=的作用只是把常量池中的地址值复制给了变量sc和sd,所以结果当然是true了
  • 布尔值扩展:

boolean flag = true;
if (flag==true){} //新手程序员
if (flag){} //老手程序员
//Less is More! 代码要精简易读

四、类型转换

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

低 ------------------------------->高
byte,short,char -> int -> long -> float -> double
  • 运算中,不同类型的数据先转化为同一类型,然后进行运算

  • 强制类型转换: (类型)变量名 高-->低

  • 自动类型转换: 低-->高

int i = 128;
//强制转换
byte b = (byte)i; //内存溢出 变成-128
//这是因为Byte类型数据的数据范围只有-128~127
​
//精度问题
(int)23.7 //23
(int)-45.89f //-45    
    
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;//-1474836480,计算的时候溢出了
long total2 = money*years;//默认是int,因为int*int默认是int,转换之前就已经存在问题了
long total3 = money*((long)years);//先把一个数转换为Long,这样会向上转型,所以就不存在一出问题

注意点:

  1. 不能对布尔值进行转换

  2. 不能把对象类型转换为不相干的类型

  3. 在把高容量转换到低容量的时候,强制转换

  4. 转换的时候可能存在内存溢出或者精度问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值