变量
什么是变量?变量其实就是存储数据、命名数据的标识符。变量有三个特征:1、允许变量存储的类型 ; 2、变量的符号; 3、变量中存储值
变量的定义
变量需要定义出来才能够使用它,定义也相对简单,变量类型 + 变量名称即可定义一个变量。需要注意的是,在同一个方法中不允许出现相同名称的定义变量。
int i;
double n;
//也可以采用多个连续定义的方法
int j, f, k, l;
变量的赋值以及初始化
变量光光定义还不行,还需要进行赋值或者是初始化才能进行运算操作,否则就会报错误,所以在使用的时候一定要确保变量是否存储有值。
那么赋值和初始化有什么区别呢?
初始化是指在定义的时候就将变量进行赋值,而赋值是指不在定义行中进行赋值。比较建议的是刚创建出来一个变量就直接对其初始化,这样在后面就不会粗心大意了。
int i = 0; //这个是初始化
int n; //定义
n = 10; //赋值
i = 11; //赋值
变量的使用
变量的使用其实就是控制一个符号内的值来进行运算、打印等等操作
int i = 0;
int n = 10;
System.out.println(i);
int k = i * n;
System.out.println(k);
结论
- 变量必须定义才能够被使用
- 如果变量仅仅创建而没有赋值或者初始化的话,不能进行操作,必须先赋值或者初始化
数据类型
Java的数据类型分为两大类:基本数据类型、引用类型。
基本数据类型
基本数据类型分为四类八种:
- 整数类型:byte、short、int、long
- 浮点数类型:double、float
- 布尔类型:boolean
- 字符类型:char
byte:
- byte所占字节数为 1 字节,即 8 位;
- 最大值:127(2^7 - 1);
- 最小值:-128(-2^7);
- 默认值:0;
- byte变量主要用在文件操作中,因为文件操作基本上都是以字节数组来保存/读取/写入非文本文件(图片、声音、可执行文件等等);
short
- short所占字节数为 2 字节,即 16 位;
- 最大值:2^15 - 1;
- 最小值:-2^15;
- 默认值:0;
- short基本上很少使用到;
int
- int所占字节数为 4 字节,即 32 位;
- 最大值:2,147,483,647(2^31 - 1);
- 最小值:-2,147,483,647 (-2^31);
- 默认值:0;
- int类型变量是最常用的,整型数据默认上都是int类型,整型变量在进行运算的结果默认也都是int,所以在运算的时候注意;
short k = 0;
short n = 1;
//错误结果,这样会编译错误
short a = k + n;
//正确写法:
int a = k + n;
short a = (short) k + n;
long
- long 所占字节数为 8 字节,即 64 位;
- 最大值是 9,223,372,036,854,775,807(2^63 -1);
- 最小值是 -9,223,372,036,854,775,808(-2^63);
- 默认值:0L
- long类型变量在赋值时加上“l”或者“L”以作标识,否则容易报错
double
- double所占字节数为 8 字节,即 64 位,其是双精度浮点数,遵循 IEEE 754 标准;
- 浮点数类型默认的就是double类型;
- 默认值:0.0;
float
- float所占字节数为 4 字节,即 32 为,其实单精度浮点数,遵循 IEEE 754标准;
- 默认值:0.0f;
- 注意:在对float类型变量赋值/初始化的时候,值的后面要加上“f”或“F”;
boolean
- boolean只表示一位的数据类型;
- boolean变量只有两种值:true,false,没有第三种值,也不能向 C 语言一样使用 0 和非 0 代替;
- 默认值:false
char
- char所占字节数为 2 字节,即 8 位,采用 Unicode 字符编码作为标准,且其存储空间较大,所以也能够存储汉字;
- 最小值是 \u0000(十进制等效值为 0);
- 最大值是 \uffff(即为 65535);
- char类型可以存储任何字符
- 注意:char变量类型的值需要使用 ‘ ’ 包裹且只能是单个字符
引用类型
除了上述的八种基本数据类型以外的变量都属于引用类型,引用类型顾名思义就是标识符指向对象的变量;
可以这么理解:引用类型变量的值并不是相对意义上的值,存储的是一个地址,而这个地址中存储的就是对象,至于什么是对象后续面向对象的时候会讲到;
画图了解:
引用和引用直接的赋值,是将引用存储的地址的赋值,也就是改变了指向的对象发生了改变
结论:
- 引用中存储的是对象的地址,并非对象的值,可以使用引用操作对象;
- 一个对象可以被多个引用指向,但是不能对象指向对象,也不能引用指向引用,更不能对象执行引用;
- 引用和引用之间的赋值是改变引用的指向,而不是改变对象
浮点数类型准确吗?
浮点数类型真的是准确的吗,答案是否定的,浮点书类型多多少少会有精度缺失的情况,让我们看看一下的代码:
double a = 13.02;
double b = 13.00;
double s = a - b;
System.out.println(s);
//答案>> 0.019999999999999574
答案并不是我们所见到的 0.02 ,这就说明浮点数类型是不准确的,但是还是能够完成一般的操作运算,只是不能够将其用在货币系统操作上,我们常看到有关货币的代码,程序员们都是将其转换成整数才开始计算的;
结论:
- 不能够使用浮点数类型进行比较运算
- float、double的运算结果往往是不准确的
解决方案:
使用BigDecimal提供的方法进行比较或运算,但要注意在构造BigDecimal的时候使用float、double的字符串形式构建,BigDecimal(String val);详情请自己查询 BigDecimal api;
BigDecimal b1 = BigDecimal.valueOf(Double.parseDouble("13.02"));
BigDecimal b2 = BigDecimal.valueOf(Double.parseDouble("13.00"));
double result = b1.subtract(b2).doubleValue();
System.out.println(result);
更多的请查看:
运算符
算术运算符
算术运算符:+ - * / %
从左到右以此表示:加、减、乘、除、余
这里重点介绍 %:
% 表示求余,即两数相除得到的余数即为结果,例如:
int a = 5 % 3; // a = 2
// 5 / 3 = 1 …… 2
值的注意的是负数的求余所得到的的结果也是负数
自增/自减运算符
自增运算符和自减运算符用法一致,这里以自加运算符举例说明;
自增运算符表示变量自动加一,其又分为前置自增和后置自增,二者的区别在于:前置运算符是先自增后参与运算,而后置自增则是先参与运算后自增;
也就是说不管是前置自增还是后置自增,变量的结果都是会改变的,其的影响就是对于运算的结果发生影响,举例:
int x = 5;
int y = 3;
int g = ++x + y++; // 6 + 3 = 9 此时 x = 6, y = 4;
System.out.println(g);
//g = 9, x = 6, y = 4;
int x = 5;
int y = 3;
int g = x++ + y++; // 5 + 3 = 8 此时 x = 6, y = 4;
System.out.println(g);
//g = 8, x = 6, x = 4
逻辑运算符
逻辑运算符是在编程中最常见的运算符:&&, ||, !
&&:逻辑与,同真即为真,一假即为假
一个表达式说明:
true && true = true;
true && false = false;
false && true = false;
||:逻辑或,同假即为假,一真即为真
false || false = false;
false || true = true;
true || false = true;
!:逻辑非,真变假,假变真
!true = false;
!false = true;
短路求值: && 和 || 之间存在短路求值,即前面表达式满足条件的情况下,后续表达式不在执行
&&:当前面表达式为 false 时,后续表达式不再执行;
||:当前面表达式为 true 时, 后续表达式不再执行;
int k = 9;
boolean a = 3 > 5 && k++;
//因为3 > 5的结果为 false,所以后面的 k++ 不再执行,
//所以 k 还是 9
boolean b = 5 > 3 || k++;
//因为 5 > 3 的结果为 true, 所以后面的 k++ 不再执行
//所以 k 还是 9
位运算符
位运算符包括:&、|、~、^
位运算符顾名思义就是按位进行运算,其主要是针对整数,对整数的二进制位进行按位运算
&:两个整数按位相与,只有二者都为 1 的情况才是 1,否则为 0;
|:两个整数按位相或,只有二者都为 0 的情况才为 0 ,否则为 1;
~:按位取反
^:按位异或,特点为二者相同为 0 ,相异为 1,其运算有两个特点:
a ^ 0 = a;
a ^ b ^ b = a;
注意: 值的注意的是
- & 和 | 也能够实现 && 和 || 的功能,当运算两边为整数时实行位运算,当运算符两边为表达式时执行逻辑运算;
- & 和 | 虽然能实现逻辑运算,但是没有短路求值,所以一般只作为位运算
三目运算符
表达式 ? 结果1 : 结果2
当表达式结果为 true 时执行 结果1的内容,反之为false则执行结果2
int x = 5;
int y = 3;
int g = 5 > 3 ? (x = 7) : (y = 9);
System.out.println("g 的结果为:" + g);
System.out.println("x 的结果为:" + x);
System.out.println("y 的结果为:" + y);
打印结果>>>
g 的结果为:7
x 的结果为:7
y 的结果为:3