Java变量
概念
变量相当于内存中的一个数据存储空间的表示。通过访问这个变量就相当于数据存储的空间。
变量使用的基本步骤
// 声明变量
int a;
// 变量赋值
a = 15;
// 打印
System.out.println(a);
// 也可以定义的同时进行赋值。
int b = 10;
变量使用的注意事项
- 变量表示内存中的一个存储空间。不同类型的变量,占用空间大小不同。
- 变量一定有自己的变量名称和数据类型。
- 变量必须先声明,然后使用。
- 变量的数据/值可以在同一类型范围中不断地变化。
- 变量在同一作用域内不能重名。
- 变量 = 变量名 + 值 + 数据类型。(变量的三要素)
数据类型
每个数据都定义了明确的数据类型,在内存中分配了不同大小的存储空间(字节)
说明:
- java数据类型分为两大类:基本数据类型,引用数据类型。
- 基本数据类型有8种:byte,short, int, long, float, double, char, boolean
- 引用数据类型:类,接口,数组
1. 整数类型(整型)
类型 | 占用存储空间 | 范围 |
---|---|---|
byte 字节 | 1字节 | -128~127 |
short 短整型 | 2字节 | -215~215-1 |
int 整型 | 4字节 | -231~231-1 |
long 长整形 | 8字节 | -263~263-1 |
整型的使用细节(IntDetail.java文件)
- Java各种整数类型有固定的范围和字段长度,不受具体操作系统的影响,以保证java程序的可移植性。
- Java的整型常量默认为int值,声明long型常量后面加大/小写
L
- Java程序中变量常声明为int型,除非不足以表示大数,才使用long。
- bit:计算机中的最小存储单元。byte是计算机的基本存储单元1byte = 8bit
2. 浮点类型
类型 | 占用存储空间 | 范围 |
---|---|---|
float 单精度 | 4字节 | -3.403E38~3.403E38 |
double 双精度 | 8字节 | -1.798E308~-1.798E308 |
说明:
- 浮点数在机器中的存储形式简单说明:浮点数 = 符号位 + 指数位 + 尾数位
具体存储可以看我的C语言专栏-C语言进阶数据的存储- 尾数部分可能丢失。造成精度的损失。(小数都是近似值)
使用细节
- 与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受OS的影响。
- Java浮点数常量(具体值)默认为double类型,声明float型常量,后面需要加f或F
- 浮点型常量有两种表达形式
十进制如3.1415 3.1415f(必须要有小数点)。
科学计数法形式:3.14e2 3.14e-2 - 通常情况下应使用double型,因为它比float更精确。
- 浮点数使用有陷阱。
浮点数使用的陷阱
阅读以下代码
double num1 = 2.7;
double num2 = 8.1/2.7;
System.out.println(num1); // 结果为2.7
System.out.println(num2); // 结果为接近2.7的一个小数。不是2.7
当我们对运算结果是小数的结果进行判断时,要非常的小心。
解决方法: 使用精度进行判断。
解决
if(Math.abs( num1 - num2 ) < 0.000001){}
//计算两个数的绝对值。0.000001不是固定的,根据需求来
3. 字符类型(char)
字符类型可以表示单个字符,字符类型为char, char是两个字节(可以存放汉字),搓个祖父我们用字符串String。
使用细节
- 字符常量是用单引号(
' '
)括起来的单个字符。 - Java中还允许使用转义字符
\
来将其后的字符变为特殊的字符常量。 - 在底层,char的本质是一个整数,在输出时,是Unicode码对应的字符。
- 可以直接给char赋值一个整数,然后输出时,会按照对应的Unicode字符输出。
- char类型是可以进行运算的。相当于一个整数,因为他都对用有Unicode码。
4. 布尔类型:boolean
- 布尔类型也叫boolean类型,boolean类型数据只有true和false。
- boolean类型占一个字节。
- boolean类型适用于逻辑运算,一般用于程序流程控制。
类型转换
1. 自动类型转换
当java程序在进行赋值或运算时,精度小的类型会自动转化为精度大的精度类型,这就是自动类型转换。
数据类型转换精度(容量)大小排序:
(小)char - int - long - float - double(大)
(小)byte - short - int - long - float - double(大)
自动类型转换注意&细节:
- 有多重类型的数据混合运算时,系统首先自动将所有数据转化成容量最大的那种数据类型,然后进行计算。
- 当我们把精度(容量)大的数据类型赋值给精度小的数据类型时,就会报错,反之就会进行自动类型转换。
- (byte,short ) 和 char之间不会相互自动转换。
- byte, short, char 他们三者可以计算,在计算时首先转换为int类型。
- boolean不参与转换。
- 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型。
2. 强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( )
,但可能造成精度降低或溢出。
强制类型转换细节说明
- 当进行数据从大到小,就需要使用强制类型转换。
- 强制类型转换符号只针对于最近的操作数有效,往往会使用小括号提升优先级。
- char类型可以保存int的常量值,但不能保存int的变量值,需要进行强制类型转换。
- byte和short,char类型在进行运算时,当做int类型处理。
基本数据类型和 String 类型的转换
我们经常需要将基本数据类型转换成String类型,或者将String类型转换成基本数据类型。
- 基本数据类型转换成String类型,使用基本数据类型+""即可完成
int n1 = 100;
float n2 = 1.1f;
double n3 = 3.4;
boolean b = true;
String s1 = n1 + "";
String s2 = n2 + "";
String s3 = n3 + "";
String s4 = b + "";
System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);
- String类型转换成基本数据类型,使用包装类调用parseXX方法
//进行类型转换
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 = Float.parseFloat(s5);
long num4 = Long.parseLong(s5);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);
结果
System.out.println(num1);//123
System.out.println(num2);//123.0
System.out.println(num3);//123.0
System.out.println(num4);//123
System.out.println(num5);//123
System.out.println(num6);//123
System.out.println(b);//true
注意事项
-
在将String类型转换成基本数据类型时,要确保String类型能够转成有效的数据。
如:可以将“123”转换成数据,不能把"hello"转换成一个整数。 -
如果格式不正确,就会抛出异常,程序会终止。
本章作业
- 程序阅读输出什么?
public class Homework01{
public static void main(String[] args){
int n1;
n1 = 13;
int n2;
n2 = 17;
int n3;
n3 = n2 + n1;
System.out.println("n3 = " + n3);
int n4 = 38;
int n5 = n4 - n3;
System.out.println("n5 = " + n5);
}
}
- 在char类型,分别保存
\n
\t
\r
\\
1 2 3 等字符,并打印输出。 - 编程,保存两本书名,用+拼接看效果。
保存两个性别,用+拼接看效果。 - 编程实现
姓名 | 年龄 | 成绩 | 性别 | 爱好存储 |
---|---|---|---|---|
xx | xx | xx | xx | xx |
要求:
-
用变量将姓名、年龄、成绩、性别、爱好 存储
-
使用+
-
添加适当的注释
-
添加转义字符,使用一条语句输出。
个人答案
- 结果如下
38
8
- 在char类型,分别保存
\n
\t
\r
\\
1 2 3 等字符,并打印输出。
public class Homework02{
public static void main(String[] args){
char c1 = '\n'; // 换行
char c2 = '\t'; // 制表符
char c3 = '\r'; // 回车
char c4 = '\\'; // 输出\
char c5 = '1'; //
char c6 = '2'; //
char c7 = '3'; //
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
System.out.println(c7);
}
}
- 编程,保存两本书名,用+拼接看效果。
保存两个性别,用+拼接看效果。
public class Homework03{
public static void main(String[] args){
// 保存书名
String book1 = "水浒传";
String book2 = "西游记";
System.out.prinln(book1 + book2);
// 保存性别使用char即可
char c1 = '男';
char c2 = '女';
System.out.prinln(c1 + c2);
}
}
- 编程实现
public class Homework03{
public static void main(String[] args){
// 定义变量
String name = "Lichen";
int age = 20;
double score = 80.9;
char gender = '男';
String hobby = "play";
// 输出信息
System.out.println("姓名\t年龄\t成绩\t性别\t爱好\n" + name + "\t"
+ name + "\t" + age + "\t" + score + "\t"+ gender + "\t"
+ hobby + "\t")
}
}