位、字节、字符
- 位(bit):计算机中最小的单位,计算机只认识二进制数表示的0和1,一个0或者一个1即表示为一位
- 字节(Byte):计算机处理数据的基本单位,是一个八位的二进制数
- 字符 :指的是计算机中使用的英文、数字、符号、中文汉字
数据单位
- 1bit 表示一位
- 1Byte = 8bit /(1B = 8b)
- 1KB = 1024B
- 1MB = 1024KB
- 1GB = 1024MB
- 1TB = 1024GB
变量概念
- 变量就是系统为程序分配的一块内存单元,用来储存各种类型的数据,变量名则代表着这块内存中的数据
- 根据所存储的数据类型不同,变量所占用的内存大小也不同
- 变量的值可以随时改变
常量概念
- 常量也是代表某块内存中的数据,和变量的区别就在于常量所代表的内存中的数据是固定的,一旦确定就不能改变
- 直接使用的数据类型对象,或者通过final修饰的数据类型就是一个常量,常量不允许重名和重复赋值。
'char'
"String"
9
9.0f
final int i = 0;
null
基本数据类型
java提供了八种基本数据类型。其中有六种数字类型(四个整数类型,两个浮点(小数)类型),一种单字符类型,还有一种布尔(判断)类型
数字类型
整数类型
byte
byte b = 1;
- byte 数据类型的长度为八位,1字节
- 取值范围是 -128(-2^7)~ 127(2^7-1)
- 默认值为0
short
short s = 1;
- short 数据类型的长度为十六位,2字节
- 取值范围是 -32,768(-2^15)~ 32,767(2^15-1)
- 默认值为0
int
int i = 1;
- int 数据类型长度为三十二位,4字节
- 取值范围是 -2,147,483,648(-2^31)~ 2,147,483,647(2^31-1)
- 默认值为0
long
long l = 1L;
- long 数据类型长度为六十四位,8字节
- 取值范围是-9,223,372,036,854,775,808(-2^63)~ 9,223,372,036,854,775,807(2^63 -1)
- 默认值是0L
- 使用long类型时数字后面需要加字母L,L理论不区分大小写但是小写容易与数字1混淆,
浮点(小数)类型
因为计算机只认0和1的原因,是没办法直接表示小数的。计算机在存储小数时,实际存储的是三个部 分:符号,整数部分,小数部分(能够计算出近似值的科学计数法)。因为存储长度有限,所以当精度 很高时,使用float和double会出现丢失精度的情况出现
float
float f = 1.0f;
- float 数据类型为单精度,长度三十二位,4字节
- 默认值是0.0F
- 使用float类型时数字后面必须要加字母F,不区分大小写,否则会报错
double
double d = 1.0d;
- double数据类型为双精度,长度六十四位,8字节
- 默认值是0.0D
- 使用double类型是数字后面需要加字母d,不区分大小写,有些情况下可以缺省(不写)
内存存值扩展
byte型的127 在内存中是 0111 1111 byte型的-128 在内存中是 1000 0000, 为什么? 从表面上看,1000 0000 应该是 -0 才对。但是-0和0其实是一个意思,不可能用两种方式来表示一个 值,为了节省空间,于是java把1000 0000看做-128。这样byte可以表示256个数字,是2的8次方
布尔(判断)类型
boolean
boolean b = true;
- boolean 数据类型表示真或假,1字节
- boolean类型只有两个值true(真)/ false(假)
- 默认值是false
单字符类型
char
char = 'a';
- char 类型为单一的2字节Unicode字符
- 取值范围是\u0000(十进制等效值为 0)~ \uffff(即为 65535);
- 默认值是0,即空字符
- char数据类型可以存储任何字符
- char类型的值需要被单引号(’ ')包裹
引用数据类型
String
String s = "a";
- String 类型代表字符串类型,即多个字符串联
- String类型的值需要被英文版的 " " 双引号包裹
- 默认值为null 即空
- 一个字符串可以存储0到任意个的任意字符
- 在java中字符串可以与字符串,或者字符串与其他数据类型使用等号(=)进行拼接操作,方便我们对字符串进行处理
String str1 = "Hello";
String str2 = "World";
String str3 = str1 + ',' + str2; //Hello,World
基本数据类型和引用数据类型的区别
基本数据类型传递的时候传递的是真实的值,而引用数据类型传递的是内存地址
String相对特殊,虽然传递的是内存地址,但是因为String是final修饰的常量,不可修改。所以每次修改String变量的时候,实际上是创建了一个新的String对象替换我们原本的String引用
除了String之外,其余的引用数据类型,只要不是final修饰的,在进行传值或者赋值的时候都是传递的内存地址,对其进行修改都会影响其中的数据