在Java 编程语言中涉及的都是以数据类型的操作,在JAVA语言中数据类型又分为两大数据类型:内置数据类型、引用数据类型。
数据类型在定义中以变量存在,变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
1. 内置数据类型
1. Byte
a) byte 数据类型是8位、有符号的,以二进制补码表示的整数;
b) 最小值是 -128(-2^7);
c) 最大值是 127(2^7-1);
d) 默认值是 0;
e) byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;
f) 例子:byte a = 100,byte b = -50。
2. Short
a) short 数据类型是 16 位、有符号的以二进制补码表示的整数
b) 最小值是 -32768(-2^15);
c) 最大值是 32767(2^15 - 1);
d) Short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
e) 默认值是 0;
f) 例子:short s = 1000,short r = -20000。
3. Int
a) int 数据类型是32位、有符号的以二进制补码表示的整数;
b) 最小值是 -2,147,483,648(-2^31);
c) 最大值是 2,147,483,647(2^31 - 1);
d) 一般地整型变量默认为 int 类型;
e) 默认值是 0 ;
f) 例子:int a = 100000, int b = -200000。
4. Long
a) long 数据类型是 64 位、有符号的以二进制补码表示的整数;
b) 最小值是 -9,223,372,036,854,775,808(-2^63);
c) 最大值是 9,223,372,036,854,775,807(2^63 -1);
d) 这种类型主要使用在需要比较大整数的系统上;
e) 默认值是 0L;
f) 例子: long a = 100000L,Long b = -200000L。
"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写。
5. Float
a) float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
b) float 在储存大型浮点数组的时候可节省内存空间;
c) 默认值是 0.0f;
d) 浮点数不能用来表示精确的值,如货币;
e) 例子:float f1 = 234.5f。
6. Double
a) double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
b) 浮点数的默认类型为double类型;
c) double类型同样不能表示精确的值,如货币;
d) 默认值是 0.0d;
e) 例子:double d1 = 123.4。
7. Boolean
a) boolean数据类型表示一位的信息;
b) 只有两个取值:true 和 false;
c) 这种类型只作为一种标志来记录 true/false 情况;
d) 默认值是 false;
e) 例子:boolean one = true。
8. Char
a) char类型是一个单一的 16 位 Unicode 字符;(Unicode编码)
b) 最小值是 \u0000(即为0);
c) 最大值是 \uffff(即为65,535);
d) char 数据类型可以储存任何字符;
e) 例子:char letter = 'A';。
1. 对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了,例如:
// char System.out.println("基本类型:char 二进制位数:" + Character.SIZE); System.out.println("包装类:java.lang.Character"); // 以数值形式而不是字符形式将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); }
2. Float和Double的最小值和最大值都是以科学记数法的形式输出的,结尾的"E+数字"表示E之前的数字要乘以10的多少次方。例如:3.14E3就是3.14 × 103 =3140
3. Char 是一个单一的 16 位 Unicode 字符,最小值是 \u0000(即为0)、最大值是 \uffff,它存储的字符和数字是对应的,在Unicode编码中charc1='a';//定义一个char类型
inti1 = c1;//char自动类型转换为int。
4. Java中声明八进制,在 赋值数字前加0,如inti=012;输出10;
5. 声明十六进制,在赋值数字前加0x,如inti=0x12;输出18;
6. 低精度可以转高精度、高精度到低精度需要强制转换(直接去掉)。
7. Character 可以对单个字符进行操作、大小写转换等
基本类型的相互转换:
1. 数字类型的高低:byte short int long float double 可以直接的相互转化(强转)
2. 其他类型的转换使用包装类:String类型转换成int类型:
int i = Integer.parseInt([String])、int i = Integer.valueOf(my_str).intValue();
int类型转换成String类型:
String s = String.valueOf(i); String s = Integer.toString(i); String s = "" + i;
string->byte
Byte staticbyte parseByte(String s)
byte->string
Byte staticString toString(byte b)
char->string
Characterstatic String to String (char c)
string->Short
Short staticShort parseShort(String s)
Short->String
Short staticString toString(Short s)
String->Integer
Integer staticint parseInt(String s)
Integer->String
Integer staticString tostring(int i)
String->Long
Long staticlong parseLong(String s)
Long->String
Long staticString toString(Long i)
String->Float
Float staticfloat parseFloat(String s)
Float->String
Float staticString toString(float f)
String->Double
Double staticdouble parseDouble(String s)
Double->String
Double staticString toString(Double)
3. 基本类型向包装类相互转换:
Integer a= new Integer(2);
反向:int b=a.intValue();
boolean b=Boolean.valueOf(“123”).booleanValue()
float f=Float.valueOf(“123”).floatValue()
double d=Double.valueOf(“123”).doubleValue()
long l=Long.valueOf(“123”).longValue()
char=Character.valueOf(“123”).charValue()
4. 在这八个类名中,除了Integer和Character类以后,其它六个类的类名和基本数据类型一直,只是类名的第一个字母大写即可注意:包装类不可以直接定义需要实例化去使用: Float d =new Float(1.00);
Integer a = newInteger(100);
5. 在数字过大时,编程时超过所占用的字节数就会数字溢出、造成负数、其他状况(就是只取最后面满足字节数的位数)
6. 占用字节数:
java中,只要是字符,不管是数字还是英文还是汉字,都占两个字节,都是一个char。char c1 = '中';char c2 = 'A'; char c3 = '1';确切说,Unicode编码是指一类编码的统称,而非某个具体编码。utf-8跟unicode是不一样的。
以utf8为例,utf8是一个变长编码标准,可以以1~4个字节表示一个字符,而中文占3个字节,ascII字符占1个字节。
因为java是以unicode作为编码方式的。unicode是一个定长的编码标准,每个字符都是2个字节,也就是1个char类型的空间。