小白的20天Java学习打卡day3

太原理工大学机器人团队20天学习打卡day3


1、数据类型​

①数据类型的作用

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

​②java中的数据类型:

  • 基本数据类型
  • 引用数据类型【后面讲】
    * 类
    * 接口
    * 数组
    * …

​③基本数据类型

  • 基本数据类型包括四大类八小种

    • 第一类:整数型 byte,short,int,long
    • 第二类:浮点型 float,double
    • 第三类:布尔型 boolean
    • 第四类:字符型 char

注意:字符串不属于基本数据类型属于引用数据类型,字符属于基本数据类型

​④八种基本数据类型各自占用空间大小是多少?

基本数据类型占用空间大小【单位:字节】
byte1
short2
int4
long8
float4
double8
boolean1
char2

计算机在任何情况下都只能识别二进制
【现代计算机底层采用交流电的方式,接通和断开就两种状态】

​⑤什么是二进制?

  • 数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则

⑥字节【byte】

1 byte = 8 bit 【1个字节 = 8个比特位】
一个比特位表示一个二进制位: 1/0
1 KB = 1024 Byte
​…

​⑦byte类型的取值范围是什么

整数型当中的byte类型,占用1个字节,所以byte类型数据占用8个比特位。

	* 关于java中的数字类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”。
	* 并且这个符号位在所有二进制位的最左边,0表示正数,1表示负数。
	* byte类型最大值:0111111转化为十进制2^7-1=127
	* byte类型最小值:-128
	* byte类型取值范围[-128 ~ 127]

⑧计算机是怎么表示现实世界中的文字的呢?【字符编码】

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

  • 为了让计算机可以表示现实世界当中的文字,我们需要进行人为的干涉,需要人负责提前制定好“文字”和“二进制”之间的对照关系。这种对照关系被称为字符编码

  • 计算机最初只支持英文,最先出现字符编码是:ASCII码

    a'---->97【01100001】
    
    a'—(按照ASCII解码)—>01100001—(按照ASCII编码)—>'a'
    

    编码和解码的时候采用同一套字典/对照表,不会出现乱码

    当解码和编码的时候采用的不是同一套对照表,会出现乱码问题。

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

  • 随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等文字,其中支持简体中文的编码方式:

    GB2312<GBK<B18030

  • 支持 繁体中文:大五码 big5

  • 后来出现了一种编码方式同意了全球所有的文字,容量较大,这种编码方式叫做:unicode编码

  • java语言源代码采用的是unicode编码方式,所以标识符可以用中文

⑨八种数据类型的取值范围

基本数据类型取值范围默认值
byte-128~1270
short-32768~327670
int-2147483648~21473836470
long0
float0.0
double0.0
booleantrue,falsefalse
char0~65535\u0000

注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数

⑩关于八种基本数据类型中的默认值

public class DataTypeTest01{
  	
    //成员变量没有手动赋值系统会默认赋值,局部变量不会
    //变量还是遵守这个语法:必须先声明再赋值,才能访问
    static int f;//成员变量
    
    public static void main(String[] args){
	
        System.out.println(f);//结果是0
    }
}

八种数据类型的默认值是一切向0看齐

2、数据类型详解

知识点大部分在代码中

①字符型char

public class DataTypeTest02
{
    public static void main(String[] args){
		
        char c = 'a';
        System.out.println(c);
        
        char x ='国';
        System.out.println(x);
        //一个中文占用两个字节,char类型正好是两个字节
        //所以java中的char类型变量可以存储一个中文字符
        
        //char y = 'ab';
        //ab是字符串不能用单引号括起来,编译错误
        
        //char k = "a";
        //"a"是字符串类型,k是char类型,类型不兼容,编译错误
    
    }
}

转义字符

​ 转义字符出现在特殊字符之前,会将特殊字符转换成普通字符

public class DataTypeTest03
{
    public static void main(String[] args){
		
        char c1 = 'n';
        System.out.println(c1);//普通的n字符
        
        char c2 = '\n'; //编译能够通过,说明这不是个字符串,而是个字符
        //这是一个“换行符”,属于char类型
        //反斜杠在java语言中有转义功能
        
        //System.out.println();和 System.out.print();的区别:
        //println表示输出之后换行,print表示输出但是不换行
        
        char c3 = '\t';//制表符tab
        //强调:制表符和空格不一样,他们的ASCII码不同
        System.out.print("A");
        System.out.println(c3);
        System.out.println("B");//输出的结果为A	B
         
        //要求在控制台上输出“反斜杠字符”
        //char k = '\';
        //反斜杠和后面的单引号一起成为一个字符 ,\'表示普通不具备特殊含义的单引号字符
        char k = '\\'; 
        //解释:第一个反斜杠具有转义功能,将后面的反斜杠转义为普通的反斜杠字符
    	//结论:在java中两个反斜杠表示一个普通的反斜杠字符
        System.out.println(k);  //输出结果为  \
        
        
        //要求输出一个单引号
        
       	//char a = '';  java中不允许这样编写程序,编译报错
        char a = '\''; //反斜杠将第二个单引号转换成普通的单引号字符,第一个单引号与最后一个单引号配对
        System.out.println(a); //输出结果为 '
     
        char m = '中';
        System.out.println(m);
        
        /*JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式
          怎么使用这个命令:
       	  在命令行输入native2ascii,回车,输入文字之后回车即可得到unicode编码
       	  */
        char n = '\u4e2d'; //'中'对应的unicode编码是 4e2d
        //其中\u 表示后面的一串数字是某个文字的unicode编码
        
        
        
        
        
    }
}

②整数型

  • java中的整数型字面值被默认当作int类型处理。要让整数型被当作long类型来处理的话,需要在整数型字面值后面添加l / L,建议使用大写的L
  • java语言当中的整数型字面值有三种表示方式:
    • 第一种方式:十进制【是一种缺省的默认方式】
    • 第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
    • 第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
public class DataTypeTest04
{
    public static void main(String[] args){
		
        int a = 10;
        int b = 010;//整数型字面值以0开头的,后面那一串数字就是八进制形式
        int c = 0x10;//整数型字面值以0x开头的,后面那一串数字就是十六进制形式
        
        System.out.println(a);//10
        System.out.println(b);//8
        System.out.println(c);//16
        
        System.out.println(a+b+c);//34
        
        int i = 123;
        //123这个整数型字面值也是int类型
        //i声明变量时也是int类型
        //int类型的123赋值给int类型的变量i,不存在类型转换
        
        long x = 456;
        //456整数型字面值被当作int类型,占用4个字节
        //x变量在声明的时候时long类型,占用8个字节
        //int类型的字面值456赋值给long类型的变量x,存在类型转换
        //int类型转换成long类型
        //int类型是小容量
        //long类型是大容量
        //小容量可以自动转换成大容量,成为自动类型转换机制
        
        
        //long z = 2147483648;
        //编译错误:过大的整数2147483648
        //2147483648被当作int类型4个字节处理,但是这个字面值超出int的范围
        
        //解决错误
        //2147483648一上来就当作long处理
        long z = 2147483648L; //不存在类型转换
    }
}
public class DataTypeTest05{    
    public static void main(String[] args){  
        
        long x = 100L;
        //int y = x;
        //编译报错,大容量不能直接赋值给小容量
        
        //大容量转换成小容量,需要进行强制类型转换
        //强制类型转换需要加“强制类型转换符”
        //加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
        //所以强制类型转换谨慎使用,因为损失精度之后可能损失严重
        
        int y = (int)x;
        //强转原理:将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】
        
        
        //原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000 		   //00000000
        //强转之后的数据:10000000 00000000 00000000 00000000
        //将以上的补码转换到原码就是最终的结果
        long k = 2147483648L;
        int e = (int)k;
        System.out.println(e);//损失精度严重,结果是负数
        
        //根据目前所学内容,下面程序应该无法编译通过
        //理由:50是int类型的字面值,b是byte类型的变量,显然大容量int转换成小容量byte
        //大容量转换成小容量是需要添加强制类型转换符的,以下程序没有添加强转符号,所以编译报错。
        byte b = 50;
        //编译发现编译可以通过
        //在java语法当中,当一个整数类型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte		  //类型的变量
        
        //byte b2 = 128; 编译报错
        //128这个int类型的字面值已经超出了byte类型的取值范围,不能直接赋值给byte类型变量
        
        //纠正错误
        byte b2 = (byte)128;
        //一定会损失精度
        //原始数据:00000000 00000000 00000000 10000000
        //强转之后:10000000
    }
}

小结

今天主要学习了数据类型的作用,分类,所占空间的大小,取值范围,默认值。详解中,学习了字符型,其中学习了转义字符的用法,整数型,其中学习了类型转换等

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值