数据类型
[toc]
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
一 计算机中的二进制
当前计算机中的数据都是由0,1组成,因为电子器件表示开和关,或者高电压和低电压这两种状态比较稳定。
那么表示0和1的一个单位叫做bit(比特),计算机中存储表示数据一般以8个bit为单位,既一个Byte(字节)。
1024Byte = 1KB, 1024KB = 1MB, 1024MB = 1GB, 1024GB = 1TB, 1024TB = 1PB
另外在数据传输时大多是以“位”(bit“比特”)为单位,所以你家里的百兆宽带都是100Mb。是小b。
Java 语言支持的数据类型分为两种:基本数据类型(Primitive Type)和引用数据类型(Reference Type)。
二 Java基本数据类型
基本数据类型包括 boolean(布尔型)、float(单精度浮点型)、char(字符型)、byte(字节型)、short(短整型)、int(整型)、long(长整型)和 double (双精度浮点型)共 8 种,详见下表所示。
关键字byte和字节Byte是不一样的概念。
类型名称 | 关键字 | 占用内存 | 取值范围 |
---|---|---|---|
字节型 | byte | 1 字节 | -128~127 |
短整型 | short | 2 字节 | -32768~32767 |
整型 | int | 4 字节 | -2147483648~2147483647 |
长整型 | long | 8 字节 | -9223372036854775808L~9223372036854775807L |
单精度浮点型 | float | 4 字节 | +/-3.4E+38F(6~7 个有效位) |
双精度浮点型 | double | 8 字节 | +/-1.8E+308 (15 个有效位) |
字符型 | char | 2 字节 | Unicode 字符 |
布尔型 | boolean | 1 字节 | true 或 false |
提示:char 代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。
六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
其中比较常用的就是byte,int,long,double,boolean
三 字节型byte
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
最小值是 -128(-2^7);
最大值是 127(2^7-1);
默认值是 0;
-
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
计算机的原理,补码决定了byte的范围。具体原理这里不做讲解。只需要知道大致范围即可。
public class DataType01_byte {
public static void main(String[] args) {
//这里的Byte是一个包装类,后面会讲到.值上等价于基本类型.同理后面的包装类Short,Integer,Long,Float,Double,Boolean.
System.out.println("基本类型:byte,二进制位数:" + Byte.SIZE);
System.out.println("最大值:" + Byte.MAX_VALUE);//最大值127
System.out.println("最小值:" + Byte.MIN_VALUE);//最小值-128
//定义一个byte
byte a = 20;
System.out.println(a);
//定义另一个byte
byte b = -50;
System.out.println(b);
}
}
四 短整型short
- short 数据类型是 16 位、有符号的以二进制补码表示的整数
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
- 默认值是 0;
public class DataType02_short {
public static void main(String[] args) {
//这里的Short是一个包装类
System.out.println("基本类型:short,二进制位数:" + Short.SIZE);
System.out.println("最大值:" + Short.MAX_VALUE);//32767
System.out.println("最小值:" + Short.MIN_VALUE);//-32768
//定义一个整型
short a = 10;
//定义学校的人数
short student = 11100;
System.out.println(student);
}
}
五 整型int
int 数据类型是32位、有符号的以二进制补码表示的整数;
最小值是 -2,147,483,648(-2^31);
最大值是 2,147,483,647(2^31 - 1);
一般地整型变量默认为 int 类型;
默认值是 0 ;
public class DataType03_int {
public static void main(String[] args) {
//这里的Integer是一个包装类,后面会讲到.值上等价于基本类型.同理后面的Long,Double,Boolean.
System.out.println("基本类型:int,二进制位数:" + Integer.SIZE);
System.out.println("最大值:" + Integer.MAX_VALUE); //2147483647
System.out.println("最小值:" + Integer.MIN_VALUE); //-2147483648
//定义一个整型
int a = 10;
//定义一个城市的人数
int cityPeople = 5000000;
//定义一个人很穷,资产是负整数
int fortune = -100;
System.out.println(fortune);
}
}
六 长整型long
- long 数据类型是 64 位、有符号的以二进制补码表示的整数;
- 最小值是 -9,223,372,036,854,775,808(-2^63);
- 最大值是 9,223,372,036,854,775,807(2^63 -1);
- 这种类型主要使用在需要比较大整数的系统上;
- 默认值是 0L;
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
public class DataType04_long {
public static void main(String[] args) {
System.out.println("基本类型:long,二进制位数:" + Long.SIZE);
System.out.println("最大值:" + Long.MAX_VALUE);
System.out.println("最小值:" + Long.MIN_VALUE);
//定义一个长整型
long a = 60L; //有一个尾巴L,表示是长整型.l也是可以的.但为了防止看错成数字'1',一般用L.
//定义地球的人口数量,值已经大于int最大值.
long earthNumber = 7200000000L;
//定义一个大型公司的负债
long loan = -10000000000L;
System.out.println(loan);
}
}
七 单精度浮点数float
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
-
浮点数不能用来表示精确的值,如货币;
public class DataType05_float { public static void main(String[] args) { //float System.out.println("基本类型:float,二进制位数:" + Float.SIZE); System.out.println("最大值:" + Float.MAX_VALUE); System.out.println("最小值:" + Float.MIN_VALUE); //定义一个单精度浮点数 float aValue = 0.1f; //有一个尾巴F(f),表示是float. System.out.println("浮点数的不精确:" + aValue/1.0);//注意查看打印值。比如我的机器为:0.10000000149011612 } }
八 双精度浮点数double
- double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
- 浮点数的默认类型为double类型;
- double类型同样不能表示精确的值,如货币;
- 默认值是 0.0d;
public class DataType06_double {
public static void main(String[] args) {
//double
System.out.println("基本类型:double,二进制位数:" + Double.SIZE);
System.out.println("最大值:" + Double.MAX_VALUE);
System.out.println("最小值:" + Double.MIN_VALUE);
//定义一个双精度浮点数
double dValue = 0.01d; //D(d),默认可以省略.
System.out.println("浮点数的不精确:" + dValue/0.1);//注意查看打印值。比如我的机器为:0.09999999999999999
}
}
九 布尔型boolean
- boolean数据类型表示一位的信息;
- 只有两个取值:true 和 false;(true是真和false是假)
- 这种类型只作为一种标志来记录 true/false 情况;
- 默认值是 false;
public class DataType07_boolean {
public static void main(String[] args) {
//boolean
boolean wisdom = true;
boolean wealth = false;
System.out.println("wisdom:" + wisdom);
System.out.println("wealth:"+wealth);
}
}
十 字符型char
- char类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(即为 0);
- 最大值是 \uffff(即为65、535);
- char 数据类型可以储存任何字符;
Unicode是一个编码方案,它为世界上每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
char 代表字符型,实际上字符型也是一种整数类型,相当于无符号整数类型。可以强制转为int类型,查看其大小。
这里只要知道概念原理就行。开发中不会用到。
Unicode的转码,可以用网上的工具:
转码工具网站地址`
public class DataType08_char {
public static void main(String[] args) {
//这里的Character是一个包装类
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);
// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);
char character = 'A';
System.out.println(character);
System.out.println((int)character);//强制转换为整型,可以比较整数大小。
char special_one = '$';
System.out.println(special_one);
char han_zi = '\u4f60';
System.out.println(han_zi);
System.out.println('\u52a0');
System.out.println('\u6cb9');
}
}
十一 类型默认值
下表列出了 Java 各个类型的默认值:
数据类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000' |
String (or any object) | null |
boolean | false |
打印出默认值:
public class DefaultValue {
byte byteData;
short shortData;
int intData;
long longData;
float floatData;
double doubleData;
boolean booleanData;
char charData;
String stringData;
public static void main(String[] args) {
DefaultValue defaultValue = new DefaultValue();
System.out.println("byte默认值:"+defaultValue.byteData);
System.out.println("int默认值:"+defaultValue.intData);
System.out.println("short默认值:"+defaultValue.shortData);
System.out.println("long默认值:"+defaultValue.longData);
System.out.println("float默认值:"+defaultValue.floatData);
System.out.println("double默认值:"+defaultValue.doubleData);
System.out.println("boolean默认值:"+defaultValue.booleanData);
System.out.println("String默认值:"+defaultValue.stringData);
System.out.println("char默认值:"+defaultValue.charData);
System.out.println("char默认值(数值):"+(int)defaultValue.charData);
}
}
十二 引用类型
8种基本数据类型以外的都是引用类型. 引用数据类型建立在基本数据类型的基础上,包括数组、类和接口。引用数据类型是由用户自定义,用来限制其他数据的类型。
- 引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 之前定义的Book等许多类创建的对象。变量一旦声明后,类型就不能被改变了。
- 对象、数组都是引用数据类型。
- 所有引用类型的默认值都是null。
- 一个引用变量可以用来引用任何与之兼容的类型。
以下是所有数据类型,其中的接口和数组我们在后面会学习.
十三 转义字符
Java语言支持一些特殊的转义字符序列。列出常用的.
符号 | 字符含义 |
---|---|
\n | 换行 (0x0a) |
\r | 回车 (0x0d) |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\ | 反斜杠 |
public class EscapeCharacter {
public static void main(String[] args) {
System.out.println("转义字符测试:\n,具有换行效果."); //在Unix内核的系du统中换行就是\n,但是windows系统中换行需要\r\n都用.作用主要就是在文本的显示效果上另起一行.
System.out.println("转义字符测试:\t,具有Tab按键效果.");
//特殊字符的打印,字符串的用法是双引号成对. 如果字符串中含有双引号,那么需要用反斜杠转义才可以识别.
System.out.println("转义字符测试:\",打印双引号.");
//同样的,反斜杠也是特殊字符
System.out.println("转义字符测试:\\,打印反斜杠.");
//在char字符中,单引号是成对出现的,如果需要使用单引号,也需要用反斜杠转义.
char charData = '\'';
System.out.println("转义字符测试,打印单引号:"+charData);
//有时候抓取别人网站数据的时候,看到\u的特殊字符串,基本都是unicode转义字符.我们可以在网上用转码工具查询.
char a = '\u4f60';
String b = "\u52a0";
String c = "\u6cb9";
System.out.println(a+b+c);
}
}
文章和项目开源地址
一起学习,最简单易懂的Java零基础入门,答疑解惑,关注点赞github
开源:https://github.com/BradYan/easy-java