java入门学习(三:数据类型)

Java基础学习——数据类型

  1. 数据类型的作用
程序当中有很多数据,每一个数据都是有相关的类型,不同数据类型的数据占用空间大小不同。
数据类型的作用是指导jvm在运行程序的时候给该数据分配多大的内存空间
  1. Java中的数据类型包括两种
A:基本数据类型
B:引用数据类型
  1. 关于基本数据类型

基本数据类型包括四大类八小种:
第一类:整数型(byte、short、int、long)
第二类:浮点型(float、double)
第三类:布尔型(boolean)
第四类:字符型(char)

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

字符串使用 “双引号”(“ASD”)
字符使用 ‘单引号’(‘A’)

  1. 八种基本数据类型各自占用空间大小
基本数据类型            占用空间大小【单位:字节】
---------------------------------
byte						1
short						2
int							4
long						8
float						4
double						8
boolean						1
char						2
  1. 计算机在任何情况下都只能识别二进制(计算机只识别1或0
  2. 什么是二进制

数据的一种表示形式。十进制表示满十进一原则,二进制表示满二进一原则
例如:十进制
0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、
例如:二进制
0、1、10、11、100、101、110、111、1000、1001…
0、1、 2、 3、 4、 5、 6、 7、 8、 9…

  1. 字节(byte)
1 byte = 8 bit1个字节 = 8个比特位】 1个比特位表示一个二进制位:1/0
1 KB = 1024byte
1 MB = 1024KB
1 GB = 1024MB
1 TB = 1024GB

1 TB = 1024 * 1024 *1024 * 1024 * 8
  1. 整数型当中的byte类型,占用1个字节,所以byte类型的数据占用8个比特位,那么byte类型的取值范围是?
9.1、关于Java中的数字类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为“符号位”,并且这个“符号位”在所有二进制位的最左边,0表示正数,1表示负数
9.2、byte类型最大值:01111111 
   【
	00000000	00000000	00000000	10000000(二进制)
	减去1结果是:
	00000000	00000000	00000000	01111111(二进制)
	】

9.3、byte类型最大值:2的7次方 - 1,结果是:127
9.4、byte类型最小值:-128
  1. 二进制和十进制之间的转换规则
二进制转换成十进制
十进制转换成二进制
  1. 计算机只认识二进制,那么计算机该何如表示现实世界中的文字?

*** 八种基本数据类型中,byte,short,int,long,float,double,Boolean这七种数据类型计算机在表示的时候比较容易,因为底层都是数字,十进制的数字和二进制之间存在一种固定的转换规则
*** 但是八种基本数据类型当中char类型表示的是现实世界中的文字,文字和计算机二进制之间“默认”情况下是不存在任何转换关系的
*** 为了让计算机可以表示现实世界中的文字,我们需要进行人为干预,需要人负责提前制定好“文字”和“二进制”之间的对照关系,这种对照转换关系称为:字符编码
*** 计算机最初只支持英文,最先出现的字符编码是:ASCII码【采用一个字节编码】
‘a’ --> 97 【01100001】
‘A’ --> 65
‘0’ --> 48

  • ‘a’ – (按照ASCII)解码 --> 01100001
  • 0110001 —按照ASCII编码 --> ‘a’
    编码和解码的时候采用一套字典/对照表,不会出现乱码
    当解码和编码采用的不是同一套对照表,会出现乱码问题
  • 随着计算机的发展,后来出现了一种编码方式,是国际化标准组织ISO指定的;这种编码方式支持西欧语言,向上兼容ASCII码,仍然不支持中文,这种编码方式是:ISO-8859-1,又称为:latin-1
  • 随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文件,其中支持简体中文的编码方式:
    GB2312 < GBK < GB18030
  • 支持繁体中文:大五码 < big5 >
  • 后来出现了一种编码方式统一了全球所有的文字,容量较大,叫做:unicode编码
    ----- UTF-8
    ----- UTF-16
    ----- UTF-25
  • Java语言采用的是哪一种编码方式?
    Java语言源代码采用的是unicode编码方式,所以“标识符”可以使用中文
  • 现在实际开发中,一般使用UTF-8编码方式较多【统一编码方式】
  1. 八种基本数据类型的取值范围

类型… … … … … … … … 取值范围
————————————————
byte… … … … … … … … [-128 ~127]
short… … … … … … … …[-32768 ~ 32767]
int… … … … … … … … …[-2147483648 ~ 2147483647]
long
float
double
boolean… … … … … … … .[true , false]
char… … … … … … … … …[0 ~ 65535]
注意:short和char所表示的种类总数是一样的,只不过char可以表示更大的正整数,因为char没有负数

  1. 关于八种数据类型的默认值
数据类型                         默认值
-------------------------------------
byte ,short ,int ,long           0
float , double                   0.0
boolean                          false【在C语言中true1false0】
char                             \u0000
八种基本数据类型的默认值是一切向0看齐。
public class Test01
 {
	
	static int a = 1 ;
	//成员变量没有手动赋值,系统会默认赋值【局部变量不会】
	static int b ;//成员变量
		public static void main (String[] args) {
			//局部变量【变量还是遵循这个语法,必须先声明,再赋值,才会被访问
			//int i  ;

		//System.out.println(i);【编译报错】
		
		System.out.println(a);
		}
}
  1. 数据类型——char
public class charTest01 {
	
	
	public static void main (String[] args) {
		
		//定义一个char类型的变量,起名a,同时赋值字符'b'
		char a = 'b';

		System.out.println(a);
	
	}
}
public class charTest01 {
	
	
	public static void main (String[] args) {
		
		//定义一个char类型的变量,起名a,同时赋值字符'b'
		char a = 'b';
		System.out.println(a);
		
		//一个中文占用2个字节,char类型正好是2个字节
		//所以Java中的char类型变量可以存储一个中文字符
		char c = '测';
		System.out.println(c);
		
		//编译错误
		//ab是字符串不能使用单引号括起来
		// char d = 'ab';
		
		//"a"是字符串类型、
		//e变量是char类型
		//类型不兼容,编译错误
		//char e = "a";
		
		//声明
		char f ;
		//赋值
		f = 'f';
		System.out.println(f);
		//再次赋值
		f = 'g';
		System.out.println(f);
		
	
	}
}

在这里插入图片描述
转义字符( \ )

public class charTest02
{
	
	
		public static void main (String[] args) {
			
			//普通的n字符
			char a = 'n';
			System.out.println(a);
			
			// \n属于换行符
			//依照目前所学知识,一下程序无法编译通过,因为显然是一个字符串,不能使用单引号括起来,但是经过编译,发现编译还是通过了,这就说明以下并不是字符串,而是一个字符
			//这是一个换行符,属于char类型的数据
			//反斜杠在Java语言中具有转义功能
			char c = '\n';
			System.out.println("Hello");
			System.out.println("World");
			
			//System.out.println()和System.out.print()区别
			//println输出之后换行,print表示输出,但是不换行
			System.out.print("Hello");
			System.out.println("World");
			
			System.out.println("A");
			System.out.println(c);
			System.out.println("B");
			
			
		
		}
}

System.out.println()和System.out.print()区别

A:print不换行

在这里插入图片描述

B:println换行
在这里插入图片描述

\n

这里是引用
在这里插入图片描述
这里是引用

\t(制表符)

  • 输出一个正常的AB这里是引用
  • 强调:制表符和空格不同,他们的ASCII不一样,体现在键盘上的两个不同的“按键”
    在这里插入图片描述
  • 要求在控制台上输出一个“反斜杠字符”
    反斜杠将后面的单引号转义成不具备特殊含义的普通单引号字符
    左边的单引号缺少了结束的单引号字符,编译报错
    在这里插入图片描述
    解释:第一个反斜杠具有转义功能,将后面的反斜杠转义为普通的反斜杠字符
    结论:两个反斜杠代表一个普通的反斜杠字符
    在这里插入图片描述
  • 以下编译报错,第一个单引号和第二个单引号配对,最后的单引号找不到另外的一半
    在这里插入图片描述
  • 反斜杠具有转义功能将第二个单引号转换为普通的单引号字符,第一个单引号和最后一个单引号配对。
    在这里插入图片描述
    JDK中自带的native2ascii.exe命令,可以将文字转换成unicode编码形式
    在这里插入图片描述
  • 总结:
    \n 换行符
    \t 制表符
    ’ 普通的单引号
    \ 普通反斜杠
    " 普通半角双引号
  1. 十六进制
十进制:0、1、2、3、4、5、6、7、8、9、10、11、12、13.....
二进制:0、1、10、11、100、101.....
十六进制:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、10、11、12、13、14、15、16、17、18、19、1a、1b、1c、1d、1e、1f、20.....
八进制:0、1、2、3、4、5、6、7、10、11、12、13、14、15、16、17、20.....

  1. 数据类型——整数型

byte ,short ,int , long

数据类型          占用空间大小          默认值          取值范围
------------------------------------------------------------
byte                 1                 0             [-128~127]
short                2                 0             [-32768~32767]
int                  4                 0             [-2147483648~2147483647]
long                 8                 0L
  • Java语言当中的“整数型字面值”被默认当作int类型来处理,要让这个“整数型字面值”被当作long类型来处理的话,需要在“整数型字面值”后面添加1/L,建议使用大写的L
  • Java语言当中的整数型字面值有三种表示方式
    第一种方式:十进制【是一种缺省默认的方式】
    第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
    第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始】
    在这里插入图片描述
  • int 类型——int类型
// 322这个整数型字面值是int类型;i变量声明的时候也是int类型
// int类型的322赋值给int类型的变量i,不存在类型转换
int i = 323;
System.out.pringtln(i);
  • int 类型——long类型(int类型属于小容量,long类型是大容量,小容量可以自动转换成大容量,称为自动类型转换机制)
// 233整数型字面值被当作int类型,占用4个字节
// n变量在声明的时候就是long类型,占用8个字节
// int类型的字面值233赋值给long类型的变量n,存在类型转换
long n = 223;
System.out.pringtln(n);
  • long类型——long类型
// 2147483647字面值是int类型,占用4个字节
// m是long类型,占用8个字节,自动类型转换
long m = 2147483647;
System.out.pringtln(m);

// 编译报错:过大的整数:2147483648
//2147483648被当作int类型4个字节处理,但是这个字面值超出int类型范围
long x = 2147483648;
System.out.pringtln(x);

// 解决错误
// 2147483648字面值一上来就当作long类型来处理,在字面值后面添加L
// 2147483648L是8个字节的long类型
// y是long类型变量,以下程序不存在类型转换
long y = 2147483648L;
System.out.pringtln(y);

图解
在这里插入图片描述
在这里插入图片描述

  • long类型——int类型(大容量转换成小容量,需要进行强制类型转换,强制类型转换需要加”强制类型转换符“,加上强制类型转换符之后编译通过了,但是运行阶段可能损失精度;所以强制类型转换谨慎使用,因为损失精度之后可能损失很严重
public class HelloWorld 
{
		public static void main (String[] args) {
		
			//100L是long类型字面值
			//x是long类型变量
			//因此不存在类型转换,直接赋值
			long x = 100L;
			
			//x变量是long类型,8个字节
			//y变量是int类型,4个字节
			//编译报错,大容量不可直接赋值给小容量,
			int y = x;
			
			System.out.println(y);
					
		}
}

编译报错:
在这里插入图片描述

  • 强转原理:
    原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
    强转之后的数据:00000000 00000000 00000000 01100100
    将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】
    在这里插入图片描述
    原始数据:00000000 00000000 00000000 00000000 10000000 00000000 00000000 00000000
    强转之后的数据:10000000 00000000 00000000 00000000
    10000000 00000000 00000000 00000000目前存储在计算机内部。计算机存储数据都是采用补码的形式存储,所以10000000 00000000 00000000 00000000现在是一个补码形式,将以上的补码转换到原码就是最终的结果
    在这里插入图片描述
  • byte类型
    A:分析下面代码中a、b、c,是否可以编译通过
    B:依据目前所学,以下程序是无法编译通过的
    C:理由:50是int类型的字面值,b是byte类型的变量,显然是大容量int类型转换成小容量byte类型,大容量转换成小容量是需要添加强制类型转换符的,以下程序并没有添加强制符号,所以编译会导致报错
    D:但是,在实际编译的时候,以下代码编译通过了,这说明,在Java语言当中,当一个整数型字面值没有超出byte类型取值范围的话,该字面值可以直接赋值给byte类型的变量
public class HelloWorld {
	
	
		public static void main (String[] args) {
		
			
			byte a = 50;
			byte b = 127;
			//byte c = 128;		
			System.out.println(a);
			System.out.println(b);
			//System.out.println(c);
				
		
		}
}

在这里插入图片描述
编译报错,128这个int类型的字面值已经超出了byte类型的取值范围,不能直接赋值给byte类型的变量

byte c = 128;
System.out.println(c);

在这里插入图片描述
纠正错误:需要使用强制类型转换符;但是一定会损失精度
在这里插入图片描述
17. 计算机二进制的三种表示形式

  • 补码
  • 反码
  • 原码
    计算机在任何情况下底层表示和存储数据的时候采用了补码形式
    正数的补码:和原码相同
    负数的补码:负数的绝对值对应的二进制码所有二进制位取反,再加1
    补码:10000000
    原码计算过程:
    10000000 -1 —> 01111111
    10000000 —> 128
    -128
  1. 数据类型——浮点型
    float 单精度【4个字节】;double双精度【8个字节】
    例如:string.java和 string.class
    我们程序中涉及的(string[] args)中的string使用的就是string.class字节码文件
    在Java语言当中,所有的浮点型字面值【3.0】,默认被当作double类型来处理,要想该字面值当作float类型来处理,需要在字面值后面添加F或f
    注意:double和float在计算机内部二进制存储的时候存储的都是近似值。在现实世界中有一些数字是无限循环的 ,例如:5.333333333333333333…计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值
public class HelloWorld {
	
	
		public static void main (String[] args) {
		
			// 3.0是double类型的字面值
			// a是double类型的变量,不存在类型转换
			double a = 3.0 ;
			System.out.println(a);	
			
			// 5.1是double类型的字面值
			// b是float类型的变量
			// 大容量转换成小容量需要加强制类型转换符,所以以下程序编译错误
			float b = 5.1 ;
			System.out.println(b);	
			
			//解决方案
			// 第一种方式:强制类型转换
			float b = (flaot)5.1 ;
			// 第二种方式:没有类型转换
			float c = 5.0f ;
		
		}
}

  1. 数据类型——布尔型
    Boolean
    在Java语言中,boolean类型只有两个值:true,false 没有其他值
    在底层存储时,Boolean类型占用1个字节,因为实际存储是false底层时0,true是1
    布尔类型在实际开发中,经常使用在逻辑运算和条件控制语句当中
public class HelloWorld 
{
		public static void main (String[] args) {
		
			// 编译报错,不兼容的类型
			boolean flag = 1;
		
		}
}

正确语法:

public class HelloWorld 
{
		public static void main (String[] args) {
		
			boolean test = true ;
			//boolean test = false ;
			
			if(test) {
				System.out.println("成功");
			}else {
				System.out.println("失败");
			}
		
		}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头发乱了伢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值