一、java中的数据类型分类:基本数据类型和引用数据类型。
1、基本数据类型:布尔型(boolean)1个字节、字符型(char)1个字节、字节型(byte)1个字节、短整型(short)2个字节、整型((int)4个字节、长整型(long)8个字节、单精度浮点型(float)4个字节、双精度浮点型(double)8个字节。
注:.>1、byte、short、int、long他们表示的都是整数且有符号。只是表示的范围不同。在给整数变量初始化时,一般给long 类型数值后加l或L;不加也没问题只是为了现实声明一下。而且在给整数赋值时他们一般没区别,但是一旦超过某个类型 的表示范围就要类型强转;
>2、boolean型的变量只能是true和false两个取值。虽然java虚拟机会用int或byte来处理表示它,但你给变量赋值整数和 null均是非法的。
>3、在整数进行运算时,出现double类型,结果就是double。没有double,有float类型则结果就是float。
若没有浮点数,则以出现的范围最大整形类型为准。比如出现long那么结果就是long类型。
但只有byte、short、char参与运算,则结果是int(但对一元运算符例外。比如:++、+=.....)类型的。
>4、浮点数单精度数赋值时,一定要加f或F,因为浮点数默认都是double型的。要声明一点的是浮点数是不精确,所以计算 结果有时是不符合预期的。(java同样也提供BigDecimal类用于解决这个问题)
>5、byte与short是没有直接数的。引用类型只有字符串有直接数。
>6、方法参数也是存在参数自动转化的。比如:void method(long param);你可以传个int类型数据。
>7、对于直接数的赋值,第1条没问题。但是对不同类型的变量之间就不同了。比如:可以 这么写 int a='a';或int b=10;
b=b+'a'; 但是把一个char类型的变量赋值给一个int类型的变量,就必须强转;
>8、数据强转时会出现数据精度问题。
2、引用数据类型: 类引用类型、接口引用类型、数组引用类型。
>1、==操作符与equals的结果问题。
就object的equals方法实现来说。两者的结果应该是一样的,因为object的equals方法就是靠==实现的。
但是为什么有时候他们的值不一样呢?比如Integer、Double(等等包装类)、String、File、Date等类。
因为他们进行地址比较时往往是无意义的。我们通常只需要它的值是否想等。所以这些类equals方法是被重写
了的。比如;只要两个Integer对象的值相等,那么他们的equals方法返回就是true。而不是==的比较地址。
>2、==与instanceof操作符的多态。
==可以比较两个基本型的值是否相等,也可以比较引用类型(比较两个引用类型所指对象地址是否一样即是否为同一 个对象)。 但是用于比较引用类型变量时,两边的变量必须是被显示声明为同类型或有继承关系,否则编译出错 (java 编译器根据变量被显示声明的类型去编译)。数组的类型也是如此。
A instanceof ClassName 或者A instanceof InterfaceName 可用于判断A所引用的对象是否是一个类的实例是则 返回true(java中一个类的实例包括自身的实例以及所有直接或间接子类的实例)。所以后面的类要么是A本类要么是父 类要么是间接父类;如果是接口要么是A实现的接口要么是所有父类是实现的接口。否则,则编译出错。(java 编译器 根据变量被显示声明的类型去编译)。