Java数据类型
- 基本数据类型
Java有8种基本数据类型,分别是:
byte:8位,最大存储数据量是255,存放的数据范围是-128~127之间。
short:16位,最大数据存储量是65536,数据范围是-32768~32767之间。
int:32位,最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
long:64位,最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1。
float:32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。
double:64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。
boolean:只有true和false两个取值。
char:16位,存储Unicode码,用单引号赋值。
Java决定了每种简单类型的大小。这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是Java程序具有很强移植能力的原因之一。
那Integer算什么?
这算是包装类型,每个基本类型都有对应的包装类型,基本数据类型与其相对应的包装类型之间的赋值使用自动装箱和拆箱,比如:
Interger num = 2;//装箱 调用了Integer.valueOf(2)
int number = num;//拆箱 调用了num.intValue()
对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。如:
基本类型byte 二进制位数:Byte.SIZE最小值:Byte.MIN_VALUE最大值:Byte.MAX_VALUE
基本类型short二进制位数:Short.SIZE最小值:Short.MIN_VALUE最大值:Short.MAX_VALUE
基本类型char二进制位数:Character.SIZE最小值:Character.MIN_VALUE最大值:Character.MAX_VALUE
基本类型double 二进制位数:Double.SIZE最小值:Double.MIN_VALUE最大值:Double.MAX_VALUE
基本类型的优势:数据存储相对简单,运算效率比较高
基本数据类型分为三大类
①数值型
数值型数据(metric data)是按数字尺度测量的观察值,其结果表现为具体的数值。现实中所处理的大多数都是数值型数据。如:
int i = 2;//int类型表示的是整数
double b = 3.5;//double表示的是双精度浮点数
float f = 35.5f;//float表示浮点型,在数值后面必须加入f表示
②字符型
字符型(Character)数据是不具计算能力的文字数据类型,用字母C表示。
它包括中文字符、英文字符、数字字符和其他ASCⅡ字符,其长度(即字符个数)范围是0-255个字符,即0x00至0xFF。如:
char c = 'a';//char表示两个字符,在运用时值用单引号引起来
③布尔型
布尔数据是boolean,只有两个值:true和false,如:
boolean bool = false;//一般运用在判断时运用,默认值false
- 引用数据类型
Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。引用类型分3种:类,接口,数组;
类(Class):所有的类,无论是Java自身已经存在的,还是用户后来创建的;
Objec类:它是所有类的父类,每个类都实现这个类的方法;用Object 可以定义所有的类;
String:String类代表字符串;
String name = "小熊啊";
String name2 = new String("枫哥哥");
接口(interface): 系统自带或者用户创建的
public interface Test{
//方法块,方法都是抽象方法,而且接口不能实例化
}
数组(array): 系统自带或者用户创建的
int[] array = new int[];//基本数据类型组成的数组
Student[] stu = new Student[];//自编译的Student类组成的数组
Java中的数据类型在内存的存储原理
(1) 基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面,Java语言里面八种数据类型是这种存储模型;
(2) 引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”(存储对象在内存堆上的地址)是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;
在比较引用类型时:
"=="比较的是内存地址,"equals"比较的是值
String s1 = "latiny";
String s2 = "latiny";
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
String s3 = new String("latiny");
String s4 = new String("latiny");
System.out.println(s3 == s4);
System.out.println(s3.equals(s4));
输出结果:
true
true
false
true