变量介绍
变量是程序的基本组成单位。
变量由类型、名称以及值三个要素组成
代码演示
int a = 1;
以上代码中,int为变量类型,a为变量名称,1为变量的值
变量相当于内存中一块数据存储空间的表示,不同的数据类型会导致数据存储空间的大小不同。
“+”的使用
- 左右为数值做加法运算
- 左右一方为字符串做拼接运算
- 运算顺序从左到右
代码演示
public class plus{
public static void main(String[] args){
System.out.println(100 + 98);
System.out.println("100" + 98);
System.out.println("hello" + 100 + 98);
System.out.println(100 + 98 +"hello");
}
}
输出
198
10098
hello10098
198hello
基本数据类型
- 数值型:byte[1]、short[2]、int[4]、long[8]、float[4]、double[8]
- 字符型:char[2]
- 布尔型:boolean[1]
PS:方括号内部为该基本数据类型的所占字节长度
整型
- Java各整数型有固定的范围和字段长度,不受操作系统影响
- Java的整型常量(具体值)默认为int类型,声明long型常量需要在后面加l或者L
- Java程序中整型变量常声明为int类型,除非不足以表示大数字才使用long类型
PS:当把一个整型常量赋值给byte时,先判断该数值是否在byte范围内,如果是就可以赋值
浮点型
- Java各浮点型有固定的范围和字段长度,不受操作系统影响
- Java的浮点型常量(具体值)默认为double类型,声明float型常量需要在后面加f或者F
- 浮点型常量通常有两种表现形式
十进制形式:5.12 512.0F .512(等价0.512)
科学计数法形式:5.12E2 5.12E-2
- Java程序中浮点型变量常声明为double类型,因为它比float类型更精确
- 浮点数使用陷阱比较:2.7和8.1/3比较
代码演示
public class FloatDetail{
public static void main(String args[]){
double num1 = 2.7;
double num2 = 8.1/3;
System.out.println(num1);
System.out.println(num2);
}
}
输出
2.7
2.6999999999999997//接近2.7但不是2.7
原因:计算机不清楚8.1小数点后到底有几位,这是由计算机储存浮点数的机制决定的
使用点:当我们对运算结果为小数的进行相等判断时,要小心;此时应该使用两个数的差值的绝对值,在某个精度范围内进行判断
不能使用以下判断
if(num1 == num2){
System.out.println("相等");
}
应该使用以下判断
if(Math.abs(num1 - num2) < 0.001){
System.out.println(math.abs(num1 - num2);
System.out.println("相等");
}
字符型
- 字符常量是用单引号括起来的单个字符
- Java中允许使用转义字符来将其后面的字符转变为特殊字符常量
- Java中char的本质是一个整数,在输出时,输出Unicode码对应的字符
- 直接给char型变量赋一个整数,输出时会按照对应的Unicode码对应的字符
- char类型是可以进行运算的,相当于一个整数,因为每个字符都有对应的Unicode码
代码演示
public class CharDetail{
public static void main(String args[]){
char c1 = ‘a‘;
char c2 = ‘张‘;
char c3 = 97;
char c4 = ‘\t‘;
char c5 = ‘b‘ + 1;
System.out.println(c1);//a
System.out.println(c2);//张
System.out.println(c3);//a
System.out.println(c4);//一个制表位
System.out.println((int)c1);//97
System.out.println(‘a‘ + 10);//107
System.out.println((int)c5);//99
System.out.println(c5);//c
}
}
输出
a
张
a
97
107
99
c
布尔类型
- 布尔类型也叫boolean类型,该类型数据只允许取值true或者false,无null
- boolean类型适用于逻辑运算,一般用于程序流程控制
基本数据类型转换
自动转换类型
基础
当Java 程序在进行赋值或者运算时,精度小的类型自动转换为精度大的类型,其大小排序规则为:
- char-->int-->long-->float-->double
- byte-->short-->int-->long-->float-->double
代码演示
public class AutoConvert{
public static void main(String args[]){
//先转换,后赋值
int a = ‘c‘;
double d = 80;
System.out.println(a);
System.out.println(d);
}
}
输出
97
80.0
细节
- 多种类型数据混合运算时,系统会先把所有数据转换成精度最大的那种数据类型再进行计算
- 当把精度大的数据类型赋值给精度小的数据类型时会报错,反之,则会进行自动转换
- (byte,short) 和 char 之间不会互相自动转换
- byte、short和 char 三者可以计算,在计算时它们都会转换为int类型
- boolean类型不参与转换
- 自动提升原则:表达式的结果的类型自动提升为操作数中最大的类型
强制转换类型
基础
强制转换是自动转换的逆过程,会造成精度降低或者溢出,需要注意
细节
- 当进行数据从高精度到低精度的转换就需要强制转换
- 强制转换符只对最近的操作数有效
- char类型可以保存int类型的常量值,但不能保存int类型的变量值,需要强制转换
代码演示
public class ForceConvertDetail{
public static void main(String args[]){
//int n = (int)10*3.5+6*1.5;错误,原因:double => int
int n = (int)(10*3.5+6*1.5);//(int)44.0 => 44
System.out.println(n);//44
int m = 100;
//char c1 = m;//错误,原因:int => char
char c2 = (char)m;
System.out.println(c2);//输出100对应的字符(d)
}
}
输出
44
d
String类型和基本类型转换
基本数据类型转String类型
语法:将基本数据类型的值 + ""
代码演示
public class BasicToString{
public static void main(String args[]){
int n1 = 10;
double d1 = 1.1;
boolean b1 = true;
String s1 = n1 + "";
String s2 = d1 + "";
String s3 = b1 + "";
System.out.println(s1 + ‘\t‘ + s2 + ‘\t‘ + s3);
}
}
输出
10 1.1 true
String类型转基本数据类型
语法:通过基本类型的包装类调用parseXX方法即可
代码演示
public class StringToBasic{
public static void main(String args[]){
String s1 = "123";
String s2 = "10.1";
String s3 = "true";
int n1 = Integer.parseInt(s1);
double d1 = Double.parseDouble(s2);
boolean b1 = Boolean.parseBoolean(s3);
System.out.println(n1);
System.out.println(d1);
System.out.println(b1);
//怎么把字符串转成字符?没有办法转换,只能取字符串里的某个字符
//String.charAt(x),其中用x来确定取第几个字符,x从0开始数起对应字符串的第一个字符
System.out.println(s1.charAt(0));
System.out.println(s1.charAt(1));
}
}
输出
123
10.1
true
1
2
注意事项
- 把String类型转成基本数据类型时,要确保String类型可以转成有效的数据,如"123"可以转换成整数,但是"hello"就无法转换成整数
- 如果格式不正确,程序就会抛出异常,然后停止运行