day5-数据类型

数据类型

程序之中有很多的数据类型,每一个数据都有相关的类型,不同的数据类型占用的空间不同,数据类型的作用就是指导JVM在运行程序的时候给该数据分配多大的内存空间

基本数据类型、引用数据类型

基本数据类型(四大类八小种):整数型  byte short int long 

                                                      浮点型  float double  

                                                      布尔型  boolean 

                                                      字符型  char

字符串“abc”不是基本数据类型,属于“引用数据类型”字符属于“基本数据类型”

数据类型占用的内存空间(字节)
byte1
short2
int4
long8
float4
double8
boolean1
char2

计算机在任何情况下只能识别二进制,对于,字节byte,1字节 = 8个比特位,一个比特位就是0或者1表示一个二进制位。1kb = 1024byte。

整数型当中的type占用一个1字节,占用8个比特位。关于java中的数字类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”,并且这个符号位在所有二进制的最左边0表示正数,1表示负数。

* byte类型的最大值:01111111,   2的7次方 - 1 ,结果是127

  byte类型的最小值:-128 

  byte类型可以表示256个不同的数字

八中数据类型当中,byte,short,int ,long ,float,double,boolean这7中数据类型计算机在表示的时候比较容易,因为底层是数字,十进制的数字和二进制存在转换关系。

但是八种数据类型的char类型表示的是现实世界的文字,文字和计算机二进制之间“默认”情况下是不存在任何转换关系的。

为了让计算机更好的表示现实世界当中的文字,我们需要人为干涉,提前制定好“文字”与“二进制”的关系,这种对照关系被称为:字符编码

最初出现的字符编码是ASCII码(一个字节编码)

ASCII编码中数字字母对照表
大写字母十进制ASCII码小写字母十进制ASCII码
A65a97
B66b98
C67c99
D68d100
E69e101
F70f102
G71g103
H72h104
I73i105
J74j106
K75k107
L76l108
M77m109
N78n110
O79o111
P80p112
Q81q113
R82r114
S83s115
T84t116
U85u117
V86v118
W87w119
X88x120
Y89y121
Z90z122

随着计算机的发展,后来出现了一种编码方式,是国际化组织ISO制定的,这种编码方式支持西欧语言,向上兼容ASCII码,仍然不支持中文。这种编码方式是ISO-8859-1,又称为latin-1

随着计算机响亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式: GB2312<GBK<GB18030

后来出现了一种编码方式统一了全球所有的文字,容量较大,这种编码方式叫做:unicode编码unicode编码方式有很多具体的实现:

utf-8;utf-16;utf-32 

java语言采用了unicode编码方式,所以“标识符”可以使用unicode编码。 

实际开发过程中使用UTF-8编码方式。 

数据类型的取值范围

byte              【-128 - 127 】

short               【-32768 - 32767 】 

boolean                【true  ; false】

char                   【0 - 65536】

数据取值的默认值,成员变量(全局变量)没有赋值,系统会自动赋值,局部变量没有赋值会报错。

数据类型的默认值
byte、short、int、long0
float、double0.0
boolean

false【在c语言中false是0,true是1】

char\u0000

数据类型详解

1.char数据类型: 

public class DataTypeTest {
    public static void main(String[] args) {
        char c = 'a' ;
        System.out.println(a);
        
        char x = '过';
        System.out.println(x);
        
    }
}

java中char类型是两个字节,一个中文刚好是两个字节,所以java中char可以一储存一个中文字符 

java中的转义字:    “\”

public class DataTypeTest {
    public static void main(String[] args) {
        // 普通的n 字符
        char c1 = 'n';
        System.out.println(c1);
        
        // 转义字符 换行符
        char c2 = '\n';
        System.out.println(c2);

    }
}

        System.out.println    //   输出后换行

        System.out.print        //   输出后不换行 

\t 代表制表符  制表符显示的为空格和空格表示相同,但他们的ACSII码不同。 

\u 代表转换后边的unicode编码

*输出一个‘ \ ’

        char c3 = '\\' ;
        System.out.println(c3);

转义字符出现在特殊字符之前,会让特殊字符变成普通字符

jdk中 native2ascii.exe命令,可以将所有字符转换为ascii码 

2.整数型数据:

数据类型占用空间大小默认值取值范围
byte10【-128~127】
short20【-32768 -32767】
int40【-2147473648-2147483647】
long80L

**java语言中的‘’整数型字面值‘’被默认当做‘int’类型处理,要让“整数型字面值”被当做long来处理的话,需要在后边添加l \ L

整数型的三种表达方式:字面值直接开头,就是10进制,以0开头就是8进制,以0x开头就是16进制形式。

        long z = 122554887; //错误的定义方法

*****后边的数字会被当做int类型处理,处理错误超出了int类型的范围,所以在后边添加l、L来转换类型。

数据转换

x变量是long类型 8个字节,y变量是int类型4个字节。——————》 编译报错,大容量不能直接赋值给小容量。 

大容量转换成小容量,需要进行强制类型转换,强制类型转换需要加‘强制类型转换符’,加上“强制类型转换符”后编译通过了,但是运行阶段可能会损失精度。所以强制类型转换符谨慎使用。

public class DataTypeTest {
    public static void main(String[] args) {
        long x  = 100 ;
        int y = (int)x;
    }
}

强制原理:

原始数据:00000000 10000000 00000000 00000000 01100100

转换之后:10000000 00000000 00000000 01100100                // 补码形式

将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】计算机储存数据都是以补码的形式储存,将补码转换为原码就是最终结果。 

        byte b = 40; 
        byte c = 128;      // 错误
        

特殊语法规则: 在字面值没有超过byte类型的范围时候,自动将int字面值转换为byte,(即自动实现从int到type,从大容量到小容量的自动转变),但是超过了就不行。

        byte b = 40;
        byte c = (byte)128;

        System.out.println(c);

输出会出现问题

**语法机制

 当一个整数字面值没有超过byte,short,char的取值范围,这个字面值可以直接给byte,short,char类型的变量。

3.浮点型数据:

float 单精度【4个字节】

double 双精度【8个字节】

double的精度太低了,不适合做财务软件。财务涉及到钱的问题,要求精度较高,所以为基础SE类库大众,准备了精度更高的类型,是一类引用数据类型,java.math.BigDecimal 

其实java程序中SUN提供了一套庞大的类库,java开发者是基于这套基础的类库来进行开发的。

例如:String.java  / String.class

在java语言当中,所有的浮点型数据默认被当做double类型来处理,如果想要当做float来处理,需要在字面值后边加上f、F。

 大容量转换为小容量需要加‘强制转换符’,所以上述程序编译有误。

解决方案1:强制转换

               float a = (float) 5.1;

                 2:没有类型转换

               float b = 5.1f;

注意:double 和 float 在计算机内部二进制储存的时候都是近似值。

4.布尔值(boolean)数据类型: 

在java语言当中boolean类型只有两个值:true 和false, 没有其他值。

与c语言当中0,1可以表示真假不同,在底层存储的时候boolean类型占用一个1个字节,因为世纪储存的时候false底层是0,true底层是1

5.转换规则:

1.除了boolean类型意外,剩下的其中类型都可以互相转换 

2.小容量向大容量转换,称为自动容量转换 

        byte<short<int<long<float<double<char<

        charshort可以表示的种类数量相同,但是char可以取更大的正整数。

3.大容量转换为小容量,程序才能运行通过,强制类型转换有可能造成数据丢失。

4.当整数的字面值没有超出byte,short,char的取值范围,可以直接赋值给变量。

5.byte,short,char混合运算时,各自先转换成了int类型再运算。

6.多种类型混合运算,会换成容量最大的数据类型再运算。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值