1.类型转换
运算中,不同类型的数据先转化为同一类型,然后进行运算。
从这里可以看出,小数的优先级一定大于整数的优先级。
自动类型转换
转换条件:
• 两种数据类型彼此兼容
• 目标类型的取值范围大于源数据类型(低级类型数据转换成高级类型数据)
在运算过程中,由于不同的数据类型会转换成同一种数据类型,所以整型、浮点型以及字符型都可以参与混合运算。自动转换的规则是从低级类型数据转换成高级类型数据。转换规则如下:
• 数值型数据的转换:byte→short→int→long→float→double。
• 字符型转换为整型:char→int。
public class Dome04 {
public static void main(String[] args) {
float money01=15.6f; //定义面包的价格
double money02=12.6; //定义牛奶的价格
int numl01=2; //定义面包的数量
int numl02=3; //定义牛奶的数量
double res=money01*numl01+money02*numl02; //计算总价
System.out.println(res); //输出总价 运行结果:69.00000076293945
}
}
从执行结果看出,float、int 和 double 三种数据类型参与运算,最后输出的结果为 double 类型的数据。这种转换一般称为“表达式中类型的自动提升”。
注意:char 类型比较特殊,char 自动转换成 int、long、float 和 double,但 byte 和 short 不能自动转换为 char,而且 char 也不能自动转换为 byte 或 short。
强制类型转换
当两种数据类型不兼容,或目标类型的取值范围小于源类型时,自动转换将无法进行,这时就需要进行强制类型转换。
public static void main(String[] args) {
int a=3;
double b=6.0;
a=(int)b;
System.out.println(a); //运行结果:6
}
}
上述代码中首先将 double 类型变量 b 的值强制转换成 int 类型,然后将值赋给 a,但是变量 b 本身的值是没有发生变化的。
在强制类型转换中,如果是将浮点类型的值转换为整数,直接去掉小数点后边的所有数字;而如果是整数类型强制转换为浮点类型时,将在小数点后面补零。
注意:
① 在把高容量转换到低容量时,强制类型转换可能存在内存溢出或精度问题。
② 不能对布尔值进行转换。
③ 不能把对象类型转换成不相干的类型
④ 操作比较大的数时候,注意溢出问题
2.变量
Java 语言是强类型(Strongly Typed)语言,强类型包含以下两方面的含义:
• 所有的变量必须先声明、后使用。
• 指定类型的变量只能接受类型与之匹配的值。
DataType identifier = value;
DataType:变量类型,如 int、string、 char 和 double 等。
identifier:标识符,也叫变量名称。
value:声明变量时的值。
变量标识符的命名规范如下:
首字符必须是字母、下划线(―)、美元符号($)或者人民币符号(¥)。
• 标识符由数字(0~9)、大写字母(A~Z)、小写字母(a~z)、下划线(―)、美元符号($)、人民币符号(¥)以及所有在十六进制 0xc0 前的 ASCII 码组成。
• 不能把关键字、保留字作为标识符。
• 标识符的长度没有限制。
• 标识符区分大小写。
注意事项:
-
每个变量都有类型,类型可以是基本类型也可以是引用类型。
-
变量名必须是合法的标识符。
-
变量声明是一条完整的语句,因此每一个声明都必须以分号结束。
变量的作用域
根据作用域的不同,一般将变量分为不同的类型:成员变量和局部变量。
public class Dome04 {
static int allClicks=0; //类变量
String str ="Hello world"; //实例变量
public void method(){
int i=0; //局部变量
}
}
(1)成员变量
成员变量分为两种:类变量(静态变量)和实例变量(全局变量)。
Java 的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。
①实例变量
实例变量在类里面和方法外面,从属于对象
(2)局部变量
局部变量是指在方法或者方法代码块中定义的变量,其作用域是其所在的代码块。可分为以下三种:
• 方法参数变量(形参):在整个方法内有效。
• 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效。
• 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内有效。
局部变量在使用前必须被程序员主动初始化值。