数据类型

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

2、Java中的数据类型包括两种
        1)基本数据类型
        2)引用数据类型
            *类
            *接口
            *数组
            ......
    
3、基本数据类型:
        1)基本数据类型包括四大类八小种
            第一类:整数型
                byte short int long
            第二类:浮点型
                float double
            第三类:布尔型
                boolean
            第四类:字符型
                char
4、字符串("abc")不属于基本数据类型,属于引用数据类型,字符属于基本数据类型
        * 字符串使用双引号 "abc"
        * 字符使用单引号   'a'
        
5、八种基本数据类型各自占用的空间大小是多少?
        
        基本数据类型    占用空间大小【单位:字节】        取值范围                               默认值
        --------------------------------------------------------------------------------------------------------------------
        byte                                         1                        (-128~127)                                      0
        short                                        2                        (-32768~32767)                              0
        int                                            4                        (-2147483648~2147483647)          0
        long                                         8                        (-2^63~2^63-1)                                0
        float                                         4                        (大约±340282347E+38F)              0.0f
        double                                     8                                                                              0.0d
        boolean                                   1                        true/false                                       false
        char                                         2                        (0~2^16-1)从0~65535                 '\u0000'

        

//数据类型默认值
		public class DefaultValue{
		
		
			static byte by;
			static short s;
			static int i; //成员变量
			static long lg;
			static float f;
			static double d;
			static boolean b;
			static char c;
			public static void main(String[] args){
				
				/*
				  变量遵守:先声明,再赋值,才能访问
				  成员变量如果没有手动赋值系统会默认赋值【局部变量没有赋值,访问则会报错】
				*/
				System.out.println("byte数据类型默认值:"+by); //0
				System.out.println("short数据类型默认值:"+s); //0
				System.out.println("int数据类型默认值:"+i);	 //0
				System.out.println("long数据类型默认值:"+lg);//0
				System.out.println("float数据类型默认值:"+f);//0.0
				System.out.println("double数据类型默认值:"+d);//0.0
				System.out.println("boolean数据类型默认值:"+b);//false
				System.out.println("char数据类型默认值:"+c);	//'\u0000'
			}
		}

6、现代计算机底层采用的是交流电的方式,接通和断开就两种状态。
    
7、字节(Byte)
        1 Byte = 8 bit    【1个字节 = 8个比特位】1个比特位表示一个二进制位:1/8
        1 kB = 1024    Byte
        1 MB = 1024    KB
        1 GB = 1024 MB
        1 TB = 1024    GB
    

8、字符编码表
        1)人为提前指定好"文字"和"二进制"之间的对照关系,这种对照关系被称为:字符编码
        2)最先出现的字符编码是:ASCII码
         01100001 ------按照ASCII编码--------->'a'
         'a' -----------按照ASCII解码---->01100001
        3)编码和解码的时候采用同一套对照表,不会出现乱码
          编码和解码的时候采用不同的对照表,就会出现乱码    
        4)java语言采用Unicode编码方式
        
9、数据类型之char

      

public class DataType_Char{
		
			//数据类型之char
			
			public static void main(String[] args){
				
				//定义一个char类型的变量,起名c,同时赋值字符'a'
				char c = 'a';
				System.out.println(c);
				//一个中文占用2个字节,char类型正好是2个字节
				//所以java中的char类型变量可以存储一个中文字符
				char c1 = '国';
				
				
				//编译报错,ab是一个字符串不能使用单引号括起来
				//char c2 = 'ab';
				
				//"a"是字符串类型;c3变量是char类型,类型不兼容,编译报错
				//char c3 = "a";
				
				/*
					转义字符 \
					反斜杠\在Java当中具有转义功能
					\n		换行符
					\t		制表符tab
					\'		普通的单引号
					\\		普通的反斜杠
					\"		普通的双引号
					
					转义字符出现在特殊字符之前,会将特殊字符转换成普通字符。
					
				*/
				System.out.print("中国"+'\n'+"南京");
				/*
					System.out.println()和System.out.print(c)区别:
					print		表示只输出,但不换行
					println		表示输出之后换行
				*/
				System.out.println('\n');
				System.out.println("中国");
				System.out.print("南京");
				
				System.out.println('\n');
				System.out.print("中国");
				System.out.println("南京");
				
				//在控制台上输出反斜杠字符
				/*
					反斜杠将后面的单引号转义成不具备特殊含义的普通单引号字符
					左边的单引号缺少了结束的单引号字符,编译报错
				*/
				/*
				char c = '\';
				System.out.println(c);
				*/
				
				char single_backslash = '\\';
				System.out.println(single_backslash);
				
				//在控制台上输出一个单引号字符
				/*
					java中不允许这样编写程序,编译报错
					char particular_case = '';
				*/
				char single_quotation = '\'';
				System.out.println(single_quotation);
				
				
				//在控制台上输出带双引号的helloworld
				System.out.println("”hello	world“");
				System.out.println("\"hello	world\"");
				
				/*
				JDK中自带的native2ascii.exe命令,可以将文字转换成Unicode编码形式
				怎么使用这个命令?
					在命令行输入native2ascii,回车,然后输入文字之后回车即可得到unicode编码
					
				*/
				
				//编译错误
				//char g = '4e2d';
				//char g = 'u4e2d';
				//编译通过:反斜杠u联合起来后面的一串数字才是某个文字的Unicode编码
				char unicode_to_native = '\u4e2d';//'中'对应的unicode编码是 4e2d
				System.out.println(unicode_to_native);
			}
		
		}

10、数据类型之整数型

1)java语言当中的"整数型字面值"被默认当作int类型来处理。要让这个"整数型字面值"被当作long类型来处理的话,需要在"整数型字面值"后面添加l/L,建议使用大写的L。
        2)java语言当中的整数型字面值有三种表示方式:
            第一种方式:十进制【是一种缺省默认的方式】
            第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
            第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
        3)当一个整数字面值没有超出byte,short,char的取值范围,这个字面值可以直接赋值给byte,short,char类型变量,这种机制SUN允许了,目的是为了方便程序员的便程。

public class DataType{
				
				//数据类型之char
				
				public static void main(String[] args){
					
					/*
					  123这个整数型字面值是int类型
					  i变量声明的时候也是int类型
					  int类型的123赋值给int类型的变量i,不存在类型转换
					
					*/
					int i = 123;
					System.out.println(i);
					
					/*
						456整数型字面值被当作int类型,占用4个字节
						x变量在声明的时候是long类型,占用8个字节
						int类型的字面值456赋值给long类型的变量x,存在类型转换
						int类型转换成long类型
						int类型是小容量
						long类型是大容量
						小容量可以自动转换成大容量,被称为自动类型转换机制
					*/
					long x = 456;
					System.out.println(x);
					
					/*
						2147483647字面值是int类型,占用4个字节
						y是long类型,占用8个字节,自动类型转换
					*/
					
					long y = 2147483647;
					System.out.println(y);
					
					/*
						编译错误:过大的整数:2147483648
						2147483648被当作int类型4个字节处理,但这个字面值超出了int类型范围
					*/
					//long z = 2147483648
					//解决错误:2147483648字面值一上来就当做long类型来处理,在字面值后面添加L
					long z = 2147483648L;
					System.out.println(z);
					
					long m = 100L;
					/*
						m变量是long类型,8个字节
						n变量是int类型,4个字节
						编译报错,大容量不能直接赋值给小容量
						
						大容量转换成小容量,需要进行强制类型转换
						强制类型转换需要加"强制类型转换符"
						加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度
						所以强制类型转换谨慎使用,因为损失精度之后可能损失严重
						
						强制原理:
							原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
							强转后的数据:00000000 00000000 00000000 01100100
							将左边的二进制砍掉【所有数据强转都遵循此原理】
					*/
					//int n = m;
					int n = (int)m;
					
					/*
						byte类型的变量,只要字面值不超过byte类型的取值范围,不用强转,直接可以赋值
					*/
					//byte b0 = 50;//编译可以通过
					//byte b1 = 127;//编译通过
					//byte b2 = 128;//编译不通过
					byte b3 = (byte)128;//强转之后为 -128,严重损失进精度
					System.out.println(b3);
				}
				
			}		

11、数据类型之浮点型
        float 单精度【4个字节】
        double 双精度【8个字节,精度较高】
        
        double的精度太低,不适合做财务软件,财务软件要求精度较高,所以SUN公司
        在基础SE类库当中为程序员准备了精确度更高的类型,只不过这种类型是一种
        引用数据类型,不属于基本数据类型,它是:java.math.BigDecimal
        
        其实java程序中SUN提供了一套庞大的类库,Java程序员是基于这套基础的类库来进行开发的。
            **SE类库位置:D:\programe file\ProgramBooks\JDK\jdk11.06\lib\src.zip\java.base\java
        
        在java语言当中,所有的浮点型字面值,默认被当作double类型来处理,
        要想该字面值当做float类型来处理,需要在字面值后面添加F/f
        
        注意:
            double和float在计算机内部二进制存储的时候存储的都是近似值
            计算机的内存资源是有限的,用有限的资源存储无限的数值只能存储近似值

     

public class DataType{
				
				//数据类型之float
				
				public static void main(String[] args){
					
					/*
					3.0是double类型的字面值
					d是double类型的变量
					不存在类型转换
					*/
					double d = 3.0;
					System.out.println(d);
					
					/*
					5.1是double类型的字面值
					f是float类型的变量
					大容量转换成小容量,需要进行强制类型转换,所以下面一句程序编译报错
					float f = 5.1;
					
					解决方案:
					第一种:强制类型转换
					float f = (float)5.1;
					第二种:没有强制类型转换
					float f = 5,1f;
					*/
				}
				
			}

12、数据类型之布尔型
        在java语言当中boolean类型只有两个值:true、false,没有其他值
        在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true是1
        
        布尔类型在实际开发使用频率较高,主要用在逻辑运算和条件控制语句当中

public class DataType{
				
				//数据类型之float
				
		public static void main(String[] args){
					
					//编译报错:不兼容的类型
					//boolean flag = 1;
					
					boolean loginSuccess = true;
					if(loginSuccess){
						System.out.println("恭喜你登陆成功");
					}else{
						System.out.println("对不起,用户名不存在或密码错误!");
					}
		}
				
}

13、基本数据类型之间的互相转换:转换规则

1)八种基本数据类型当中除布尔类型之外,剩下的7种类型之间都可以互相转换

2)小容量向大容量转换,称为自动类型转换,容量从小到大排序

                byte< short < int < long < float < double 

                      char <

                注:

                    任何浮点类型不管占用多少个字节,都比整数型容量大

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

3)大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。

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

5)byte、short、char混合运算的时候,各自先转换成int类型再做运算

6)多种数据类型混合运算,先转换成容量最大的那种类型再做运算

public class DataType{
								
		//数据类型之float
									
	   public static void main(String[] args){	
			/*
			 java中的运算会转换成容量最大的类型来进行计算
			 10和3默认为int类型,所以运算后的最大类型也是int
			*/
			double num1 = 10d;
			float num2 = 3f;
			float num3 = 10.0f;
			long num4 = 10;
			//num1的值是:10.0        num2的值是:3.0
			System.out.println("num1的值是:"+num1+'\t'+"num2的值是:"+num2);
						
			int result0 = 10/3;
			System.out.println(result0);//3
			float result1 = 10/3;
			System.out.println(result1);//3.0
			double result2 = 10/3;
			System.out.println(result2);//3.0
		    /*
			int result3 = (int) num1/num2;
			编译报错: 不兼容的类型:  从float转换到int可能会有损失
			编译过程中会将num1先转换成int类型再与float类型的num2进行相除运算,
			运算后的结果为floa类型,float类型的字面值直接赋值给int型会出现类型不兼容
			*/
	        int result3 = (int)(num1/num2);//运算符优先级问题,用括号括起来先相除,再强转,再赋值
			System.out.println(result3);//3
			double result4 = num1/num2;
			System.out.println(result4);//3.3333333333333335
			double result5 = 10.0/3;
			System.out.println(result5);//3.3333333333333335
			double result6 = num3/3;
			System.out.println(result6);//3.3333332538604736
			byte result7 = (byte)(int)(num4/3);
			System.out.println(result7);//3
						
			short i = 5;
			byte j = 10;
			/*
				错误,short和byte运算,首先会转换成int再运算
				所以运算结果为int,int赋值给short就会出现精度丢失问题
				short h = i + j;
				可以将运算结果强制转换成short
				short h = (short) i + j;
		   */
						
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值