目录
前言
若在程序的世界中只有固定不变的量,那么程序的世界就会变得非常的单调并且其实现的功能也会大大减少。不论是使用哪种高级程序语言编写程序,变量都是程序基本组成单位,如其在Java中的应用如下:
class Test{
public static void main(String[] args){
int a=1;//定义了一个变量,类型为int
int b=3;//定义了一个变量,类型为int
b = 89;//把89值赋给b变量
System.out.println(a);//输出变量a
System.out.println(b);//输出变量b
}
}
可见变量在我们程序中的重要性,本文我们来解开Java类型的谜团、探索变量的声明以及研究如何运用变量等问题。
一、变量的介绍
1、概念及变量声明
变量相当于内存中一个数据存储空间的表示
我们可以把Java的变量想象成是杯子,是一种容器,承装某些事物。它有大小与类型(就如同杯子也有不同的类型一样:例如咖啡杯、茶杯、有把手的杯、金属杯等等)。
对于变量的声明是由规则的:
- variables must have a type — 变量必须拥有类型
- variables must have a name — 变量必须有名称
例如:定义一个类型为整型,名称为a的变量
int a;
2、变量的原理
我们使用如下例子进行讲解:
class Test{
public static void main(String[] args){
int a=1;//定义了一个变量,类型为int
System.out.println(a);//输出变量a
}
}
计算机就如同一个人,而内存就相当于大脑。int a=1;这句话表示在内存中开辟了一个大小为4字节的内存空间,命名为a,并将1赋值给a。这便是变量的原理,通过下面的流程图我们能够更好地了解该过程:
3、变量入门案例
编写代码记录人的信息,包括姓名、年龄、体重、性别:
class CSDN{
public static void main(String[] args) {
//记录人的信息
int age = 25;
double weight = 62.4;
char gender = '男';
String name = "yxl";
//输出信息
System.out.println("人的信息如下:");
System.out.println(name);
System.out.println(age);
System.out.println(weight);
System.out.println(gender);
}
}
对于上面所使用到的变量类型我们会在后文进行讲解。
4、变量使用注意事项
1)变量表示内存中的一个存储区域,不同的变量类型不同,占用的空间大小不同。比如int为4个字节,double为8个字节。
2)这个存储区域有自己的名称-[变量名]和类型[数据类型]
3)变量必须先声明,后使用,是有顺序的,否则编译器会报错。
4)该区域(即作用域)的数据/值可以在同一类型范围内不断变化
5)变量在同一个作用域内不能重名
6)变量 = 变量名 + 值 + 数据类型——变量的三要数
5、Java程序中 + 号的使用
使用原则如下:
1、当左右两边都是数值型时,则做加法运算
2、当左右两边有一方为字符串,则做拼接运算
3、运算顺序,是从左到右
例题:
class CSDN{
//编写一个 main 方法
public static void main(String[] args) {
System.out.println(100 + 98);
System.out.println("100" + 98);
System.out.println(100 + 3 + "hello");
System.out.println("hello" + 100 + 3);
}
}
通过上面的法则自己尝试写出输出结果:
二、数据类型
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。Java的类型数据如下:
每个类型后面的数据表示其大小。(!!这张图需要背下来!!)本文先对基本数据类型进行说明。
1、整数类型
1)基本介绍
Java的整数类型就是用于存放整数值的,比如20,3,1029等等
代码举例:
byte n1 = 23;
short n2 = 12;
//n3与n4的值相同当因为其类型不同,所以内存大小不同
int n3 = 10;
long n4 = 10;
2)整数类型的分类
类 型 | 占用存储空间 | 范围 |
---|---|---|
byte(字节) | 1字节 | -128 ~ 127 该范围由二进制决定 |
short(短整型) | 2字节 | -(2^15) ~ 2^15-1 -32768 ~ 32767 |
int(整型) | 4字节 | -2^31 ~ 2^31-1 -2147483648 ~ 2147483647 |
long(长整型) | 8字节 | -2^63 ~ 2^63-1 |
3)整型的使用细节
- Java各整数类型有固有的范围和字段长度,不受具体OS(操作系统)的影响,以保证Java程序的可移植性。
- Java的整型常量(具体值)默认为int型,声明long型常量须后加‘l’ 或 ‘L’
- Java程序中变量常声明为int型,除非不足以表示大数,才使用long
- bit:计算机中的最小存储单位;byte:计算机中基本存储单元,1byte = 8bit
2、浮点类型
1)基本介绍
Java的浮点类型可以表示一个小数,比如3.14、8.98、62.57等等
代码举例:
float num1 = 234.21F;
double num2 = 826.8;
2)浮点数类型分类
类型 | 占用存储空间 | 范围 |
---|---|---|
float(单精度) | 4字节 | -3.403E38 ~ 3.403E38 |
double(双精度) | 8字节 | -1.798E308 ~ 1.798E308 |
关于浮点数的简单说明:
- 浮点数在机器中的存放形式为:浮点数 = 符号位 + 指数位 + 尾数位
- 位数部分可能丢失,造成精度损失(小数都是近似值)
3)浮点型的使用细节
- 与整型类似,Java浮点类型也有固定的范围和字节长度,不受具体OS的影响。(float 4个字节 double 8个字节)
- Java的浮点型常量(具体值)默认为double型,声明float型常量,须后加 ‘f’ 或 ‘F’ 。这就是为什么上面举例的代码中float型声明时后面需要加 ‘F’
- 浮点型常量有两种表示形式
- 十进制数形式:如:5.12 512.0f .512(必须有小数点)
- 科学计数法形式:如:5.12e2 [5.12*10的2次方] 5.12E-2 [5.12*10的-2次方]
- 通常情况下,应该使用double型,因为它比float型更精确
- 浮点数的使用陷阱——2.7与8.1 / 3的比较
2.7与8.1 / 3的比较问题:见下面一段代码:
class CSDN{
//编写一个 main 方法
public static void main(String[] args) {
double num11 = 2.7;
double num12 = 8.1 / 3;
System.out.println(num11);
System.out.println(num12);
if( num11 == num12) {
System.out.println("num11 == num12 相等");
}
}
}
根据我们之前的认知来看2.7 = 8.1 / 3,即num1 = num2,那么便会打印出“num1 == num2 相等”这句话,我们来看看程序运行结果:
该运行结果与我们之前认为的有所差别,并且没有输出“num1 == num2 相等”这句话。我们来对这个结果进行分析。
当我们对运算结果是小数的进行相等判断时要小心,就如上面的例子来说,它得到的是一个非常接近2.7的小数而并不是等于2.7。if语句的判断条件应该修改为:以两个数的差值的绝对值, 在某个精度范围类判断,正确代码如下:
class CSDN{
//编写一个 main 方法
public static void main(String[] args) {
double num11 = 2.7;
double num12 = 8.1 / 3;
System.out.println(num11);//2.7
System.out.println(num12);//接近 2.7 的一个小数, 而不是 2.7
if(Math.abs(num11 - num12) < 0.000001 ) {
System.out.println("差值非常小,可近似相等...");
}
}
}
3、字符类型
1)基本介绍
字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符我们用字符串String(后面详解)
代码举例:
char c1 = 'a';
char c2 = '\n';
char c3 = '杨';
char c4 = 99;
2)字符串使用细节
- 字符常量是用单引号(‘ ’)括起来的单个字符
- Java中还允许使用转义字符 ‘\’ 来将其后的字符转变为特殊字符型常量。例如:char c3 = '\n'; — ‘\n’表示换行符
- 在Java中,char的本质是一个整数,在输出时,是unicode码对应的字符 http://tool.chinaz.com/Tools/Unicode.aspx
- 可以直接给char赋一个整数,然后输出时,会按照对应的Unicode字符输出(97-->a)
- char类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码
4、布尔类型
1)基本介绍
布尔类型也叫boolean类型,boolean类型数据只允许取值true和false,没有null
boolean类型只占用一个字节
boolean类型适于逻辑运算,一般用于程序流程控制
- if条件控制语句
- while循环控制语句
- do...while循环控制语句
- for循环控制语句
2)案例演示
public class CSDN {
public static void main(String[] args) {
//演示判断成绩是否通过的案例
boolean isPass = true;//定义一个布尔变量
if(isPass == true) {
System.out.println("考试通过, 恭喜");
} else {
System.out.println("考试没有通过, 下次努力");
}
}
}
三、基本数据类型的转换
基本数据类型的转换分为自动类型转换与强制类型转换
1、自动类型转换
1)基本介绍
当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
数据类型按精度(容量)大小排序为:
即可从上图的左至右转换,反之不能进行自动类型转换。
代码举例:
int a = 'c'; //正确
int b = 3.14; //错误
2)自动类型转换注意与细节
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
- 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
- (byte, short)和char之间不会相互自动转换。
- boolean不参与转换
- 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型
2、强制类型转换
1)基本介绍
自动类型转换的逆过程, 将容量大的数据类型转换为容量小的数据类型。 使用时要加上强制转换符 ( ), 但可能造成精度降低或溢出
代码举例:
int i = (int)1.9;
int j = 100;
byte num = (byte)j;
2)强制类型转换注意与细节
- 当进行数据的大小从大——>小,就需要使用到强制转换
- 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
- char类型可以保存int的常量值,但不能保存int的变量值,需要强转
- byte和short, char类型在进行运算时,当做int类型处理。
3、基本数据类型和 String 类型的转换
在程序开发中,我们经常需要将基本数据类型转成String类型。或者将String类型转成基本数据类型。接下来我们来介绍它们之间的转换
1)基本数据类型 ——>String型
语法:将基本类型的值+""即可
代码举例:
public class StringToBasic {
public static void main(String[] args) {
//基本数据类型->String
int n1 = 100;
float n2 = 1.1F;
double n3 = 4.5;
boolean n4 = true;
String s1 = n1 + "";
String s2 = n2 + "";
String s3 = n3 + "";
String s4 = n4 + "";
System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);
}
}
s1~s4就是n1~n4对应的String型,转换之后就可以进行拼接操作。
2)String型 ——>基本数据类型(了解)
在本文中先对该过程有一个印象即可
语法:通过基本类型的包装类调用parseXX方法即可
public class CSDN {
public static void main(String[] args) {
String s5 = "123";
//解读 使用 基本数据类型对应的包装类,的相应方法,得到基本数据类型
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("===================");
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
//怎么把字符串转成字符char -> 含义是指 把字符串的第一个字符得到
System.out.println(s5.charAt(0));//1
}
}
3)注意事项
- 在将 String 类型转成 基本数据类型时,要确保String类型能够转成有效数据,比如我们可以把 "123" , 转成一个整数,但是不能把 "hello" 转成一个整数
- 如果格式不正确, 就会抛出异常, 程序就会终止, 这个问题在之后章节中会处理
如下面这个程序:
public class CSDN {
public static void main(String[] args) {
String str = "hello";
//转成int
int n1 = Integer.parseInt(str);
System.out.println(n1);
}
}
其运行结果为:
若文章内有错误,欢迎各位大佬指出