Java的数据类型分两种:
1. 8个基本类型(原始类型):
四个整数型
(1)byte:byte数据类型是8位;
(2)short:short数据类型是16位;
(3)int: int数据类型是32位;
(4)long:long数据类型是64位;
两个浮点型
(5)float:float数据类型是32位(单精度浮点数);
(6)double:double数据类型是64位(双精度浮点数);
一种布尔型
(7)boolean:boolean数据类型是表示一位的信息,大小没有明确指定,只有true或false;
一种字符类型
(8)char:char数据类型是16位(Unicode字符);
2. 对象类型(封装类):
Byte,Short, Integer,Long;
Float,Double,
Boolean,
Character,
String,
以及其它一切java提供的,或者你自己创建的类。
比如 :Long是Java为long提供的封装类,一般封装类的名字首写是数值名的大写开头。
什么叫封装类? 在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算。所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以和另一个对象进行运算了。
比如我们也可以定义一个类:
class Long
{
int i=0;
public Long (int i)
{
this.i=i;
}
}
这样这个Integer就是一个包装类,他包装了一个整数值,然后可以在里面写一些运算符重载的方法使它支持某些运算。这个时候可以赋值:
Long it = new Long(10);
现在变量it就是一个对象,不是一个数字。
long 是长整型,再怎么长本身也是整型,12.10的整形部分是12,当然结果是12。
byte: 八位整数 -128——127,可用来节省内存的使用。
short: 16位整数 -32768——32,767,也比较省内存。
int: 32位整数 -2,147,483,648——2,147,483,647,一般来说整数都够用了
long: 64位整数 -9,223,372,036,854,775,808—— 9,223,372,036,854,775,807,一般不需要用
float: 32位浮点,如果浮点需要节省内存用这个。
Double: 64位浮点,一般非整数浮点可用这个。
注意:float和double都不是精确的,如果要储存钱一类的必须精确的,用java.math.BigDecimal。
数据间的比较(equal()与==间的区别)
封装类和原始类型的行为完全不同,并且它们具有不同的语义,具有不同的特征和用法,它们包括:大小和速度问题,存储的数据结构类型,用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
如:int 一般做为数值参数就够了,Integer 一般做类型转换的时候用的较多。
基本类型比较: if (a==b) 模式
对象类型比较: 对象.equals(对象)模式, 比较的是地址,不是比较内容。
注意:equals不适合比较基本类型。
变量的值只能通过赋值表达式来改变;对象的内容只能通过自身的方法或属性来改变。 注意基本数据类型不包括:String String str = null; //将空内存地址(null)赋值给String类型的变量,变量名为str。朴素的说法是变量str的值为null。对于引用类型的变量而言,赋值操作只是将对象的内存地址保存到变量中。也就是说引用类型的变量值是对象的内存地址而不是对象的内容 String str1 = "abc"; String str2 = new String("abc");
上述两种赋值操作本质上没有任何区别,最大的区别是生成对象的方法不同(这一点与赋值操作无关)。对于变量而言,其值仍然是所指对象的内存地址。
String p1 = "lyy";
String p2 = "lyy";
String p3 = p1;
System.out.println((p1==p2) + "****" + (p1.equals(p2)));//true****true
System.out.println((p1==p3) + "####" + (p1.equals(p3)));//true****true
String s1 = new String("lyy");
String s2 = new String("lyy");
String s3 = s1;
System.out.println((s1==s2) + "****" + (s1.equals(s2)));//false****true
System.out.println((s1==s3) + "####" + (s1.equals(s3)));//true####true
String通过常量方式来赋值时,地址和内容相同,通过==和equal比较结果相同;
通过对象方式赋值时,内容相同但地址不同,所以用==比较的结果是false,通过equal比较结果是true。
int i1 = 127;
int i2 = 127;
int i3 = 128;
int i4 = 128;
System.out.println(i1==i2);//true,无equal语法
System.out.println(i3==i4);//true,无equal语法
Integer k1=127;
Integer k2=127;
Integer k3=128;
Integer k4=128;
System.out.println((k1==k2) + "####" + (k1.equals(k2)));//true####true
System.out.println((k3==k4) + "****" + (k3.equals(k4)));//false****true
int是基本类型可使用==来比较,无法使用equal来比较;
Integer是对象类型,当取值在-128到127之间时,这些值都存储在常量池中,地址和内容相同,可以通过==和equal来比较,超出的部分则是通过对象的方式存储,地址不同但内容相同,所以equals比较结果是true。