一、变量的类型
引用数据类型就是对一个对象的引用,对象又包括实例和数组两种。实际上,引用数据类型变量就是一个指针,只是java里不再运用指针这个说法。
另外引用类型有一种特殊的null类型,也称为空类型。空引用(null)是null类型变量唯一的值。空引用可以转换为任何引用类型,但它不能转换为基本类型,因此不要把null值赋值给任何基本数据类型变量。
基本数据类型字节表:
boolean 布尔型 1/8
byte 字节类型 1
char 字符型 2 一个字符能存储一个中文汉字
short 短整型 2
int 整数类型 4
float 浮点类型(单精度) 4
long 长整形 8
double 双精度类型(双精度) 8
问题:String是基本的数据类型吗?
回答:String不属于基本数据类型范畴内,但String属于最常见的一种引用类型。
二、变量的命名规范
问题:int age; int Age; int _age; int $age; int 1age; int-age哪个是会编译出错的?-
三、字面量
字面常量就是一个确定的值本身
有名常量,即是把常量 赋给这个名字
int a= 1
1是字面量
然后这个字面量有个名字a,就是有名常量
1.整数字面量为整型(int)
2.小数字面量为双精度浮点型(double)
问题:
public class test{
public static void main(String args[]{
byte b = 1;
int i = 1;
short s = 1;
long l = 1;
float f = 1.0;
doule d = 1.0
i = l;
}
}
以上代码编译是否出错?
回答:错误-可能损失精度;1.0是双精度浮点型;float f = 1.0F;
-可能损失精度;l的数据类型大于i的数据类型;不能把大的数据类型赋值给小的数据类型;
问题:int j = 0.5 * 10;有什么错?short sl = 1;sl = sl + 1;有什么错?
short sl = 1;sl += 1;有什么错?
回答:数据类型在运算时,结果的数据类型由字面量最大的数据类型决定。0.5是double型,因此j是int型,在赋值给j时,编译器会报错,应改为double j = 0.5*10;同理,sl + 1运算时会自动提升表达式的类型。对于最后一种情况,由于sl+=1是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
问题:char c = “a”;是否会编译出错?
回答:错误。不兼容的类型,需要char,找到String。
注意:char只能用单引号。
但是需要注意的是:
- 如果直接将一个较小的整数常量(在byte或short类型的表述范围内)赋给一个byte或short常量,系统会自动把这个整型变量当成byte或者short类型来处理。
- 如果使用一个巨大的整数变量时,java不会自动的把这个整数常量当成long类型来处理,应在这个整数常量后增加L作为后缀。
- 如果把0~65535范围内的一个int整数赋给char类型变量,系统会自动把这个int整数当成char类型来处理。
下面举个简单的例子:
public class Test{
//下面这行代码正确,因为在byte的表述范围内
byte a = 127;
//error:超过byte表述范围
byte b = 128;
//error:超出int表述范围
long bigvalue = 9999999999;
//正确
long bigvalue = 9999999999L;
//正确
char c = 97;
}
整型数据表述范围如下图:
四、常量
在java中,利用关键字final指示常量。例如:
public class Constants{
public static void main(String[] args){
final double CM_PER_INCH = 2.54;
double paperWidth = 8.5;
double paperHeight = 11;
System.out.println("PaperSize in centimeters:"+ paperWidth * CM_PER_INCH + "by"+ paperHeight * CM_PER_INCH );
}
}
关键字final表示这个变量只能被赋值一次。一旦被赋值后,就不能够再更改了,习惯上,常量名使用全大写。
使用常量有三个好处:
- 不必重复输入同一个值;
- 如果必须修改常量值,只需在源代码中一个地方做改动;
- 给常量赋一个描述性名称会提高程序可读性;