java中变量与变量命名的规则
与其他大部分编程语言一样,在java中变量需要先定义再使用。创建变量就是在内存上申请了一定的空间来存放数据。
那么怎么定义变量呢?
比如说int a = 5;
这个变量有以下几部分内容
- 变量允许存储的数据类型(int型)
- 表示变量的符号(a)
- 变量中存储的值(5)(也可以不用进行初始化)
对于使用变量,我们来看一个例子:
int a = 7;
System.out.println(a);//这里使用了变量a,打印结果为7;
关于变量的定义和使用比较简单,这里就不再赘述。
变量的命名规则
关于变量的规则有硬性指标和软性指标,顾名思义,硬性指标就是java语法严格规范的,必须要遵守的。
硬性指标:
- 一个变量名只能包含数字, 字母, 下划线
- 数字不能开头.
- 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量.
注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做.
软性指标:
- 变量命名要具有描述性, 见名知意.
- 变量名不宜使用拼音(但是不绝对).
- 变量名的词性推荐使用名词.
- 变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了 第一个单词之外, 其他单词首字母都大写.
int maxValue = 50;
String studentName = "王小帅";
java的基本数据类型
java中的基本数据类型有“四类八种”
四类:整数型、浮点数型、字符型和布尔型。
八种:byte 、short、 int、 long属于整数型;
double 、float 属于浮点数型;
char 属于字符型;
boolean 属于布尔型;
1.byte:字节类型变量
表示的是整数,只占一个字节,表示范围(-128~+127).
byte value = 0;
System.out.println(value);
2.short:短整型变量
表示是整数,占两个字节,表示范围(-32768~32767).
short value = 0;
System.out.println(value);
3.int:整型变量
表示的是整数,占四个字节,表示范围(-2^31~2^31-1).
4.long:长整型变量
表示整数,占8个字节,表示范围(-2^63~2^63-1).
5.double:双精度浮点型变量
表示浮点数,占8个字节,但不能单纯地用2^n来表示数据范围。
需要注意的是,double类型是存在一定的精度误差的。我们来看一个例子:
double a = 1.1;
double b = 1.1;
if ( a * b == 1.21){
System.out.println("相等");
}else{
System.out.println("不相等");
}
运行结果:
不相等
这里呢,就出现了精度误差,在java中,不能用==来判断两个浮点数是否相等,解决办法就是我们可以设置一个精度范围,比如-0.0001~0.0001,只要在这个精度范围内,我们就认为两个数是相等的的。
double a = 1.1;
double b = 1.1;
System.out.println(a * b);
if (a * b - 1.21 < 0.0001 && a * b - 1.21 > -0.0001 ){
System.out.println("相等");
}else{
System.out.println("不相等");
}
运行结果:
1.2100000000000002
相等
6.float:单精度浮点型变量
占4个字节,表示的精度比double小,一般不用float。
7.char:字符型变量
占两个字节,一个字符占两个字节,也可以表示中文。
char ch = '啊';
8.boolean:布尔类型变量
boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这个没有明确规定.
boolean bo = true;
- boolean 类型的变量只有两种取值, true 表示真, false 表示假.
- Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
总结:
byte short int long分别占 1 2 4 8 个字节,double float 分别占 8 4 个字节,char 占 2个字节 , boolean 没有规定.
9.String:字符串类型变量
String name = "王小帅";//注意是双引号
数值提升
数值提升就是当两个不同类型的变量在一起混合运算时,其中有一个变量类型会发生改变,同时得到的结果的类型也会变化。比如:
int a = 10;
long b = 20;
int c = a + b;// 编译出错
long d = a + b;//编译通过
即当int 和 long 混合运算的时候,int 会提升为 long,得到的结果也是 long 。反之,则编译错误。
byte a = 10;
byte b = 20;
byte c = a + b;//编译报错
虽然a和 b都是byte型的,但计算时会将byte提升为int,这时结果也就是int,所以用byte来接受的话会报错。short,byte都有这样的情况。正确应该使用强制类型转换:
byte c = (byte) a + b;
关于运算符
1.算术运算符
+ - * / %是常用的算数运算符,用法不再赘述了。
要注意的是 0 不能作为除数。
%不仅能对int取模,也可以对double取模。
+= -= *= /= %= 是增量赋值运算符,用法也很简单,看一个例子就够了:
int a = 10;
a += 1;//等价于a = a+1;
//此时,a = 11;
其他四个跟这个一样。
++ --是自增/自减运算符,这里着重对++进行讲解:
int a = 10;
int b = a++;
//想一下,此时b和a分别是多少?,此时, b = 10 ,a = 11;
int c = 10;
int d = ++c;
//此时,c和d又等于多少呢?,此时c = 11,d =11
注意a++ 和 ++a 是不一样的,前置++和后置++主要区别在取返回值,如果不取返回值就没有区别。++a表示自增之后的值,a++表示自增之前的值。也就是说,上面的例子中,对应的a和c本身都完成了+1的操作,用b 来接收a++,接受的是自增之前的值,用d来接收++c,接收的是自增之后的值。
关系运算符
== != < > <= >=
int a = 10;
int b = 20;
System.out.println(a == b);//false
System.out.println(a != b);//true
System.out.println(a < b);//true
System.out.println(a > b);//false
System.out.println(a <= b);//true
System.out.println(a >= b);//false
关系运算符的表达式返回值都是 boolean 类型.
逻辑运算符
&& || ! 分别表示逻辑上的与、或、非
逻辑运算符针对的是布尔类型。
短路求值
&& 和 || 遵守短路求值的规则.
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false
System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true
计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.
结论:对于&&,先假则假,对于||先真则真。
位运算符
位运算符主要有四个:
& | ~ ^ 位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列)。
**按位与&:**如果两个二进制为都是1,结果为1 ,反之为0;
int a = 10;
int b = 20;
System.out.println(a & b);//结果为0
按位或|:如果两个二进制为都是0,结果为0 ,反之为1;
按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0;
按位异或^:如果两个数字的二进制位相同,则结果为0,相异结果为1;