Java-变量和运算符
变量
变量指的是程序运行时可变的量,相当于开辟一块内存空间来保存一些数据。
Java中没有无符号变量,所有的数据型变量均有符号,0代表正数,1代表负数。
1、整型变量
基本格式:
int 变量名 = 初始值;
在java中,一个int变量占4个字节,其中,第一位为符号位,剩余的32位为数值位。所以有int型变量的取值范围是:-231 — 231-1。
使用以下代码进行查看:
System.out.println(Integer.MAX_VALUE);//2147483647
System.out.println(Integer.MIN_VALUE);//-2147483648
若运算的结果超出了int的最大范围,就会出现溢出的情况。
int maxValue = Integer.MAX_VALUE;
int minValue = Integer.MIN_VALUE;
System.out.println(maxValue+1);//-2147483648
System.out.println(minValue-1);//2147483647
Java中“+”的使用方法:
int a = 10;
int b = 20;
System.out.println(a+b);//30
System.out.println("a + b = " + a + b);//a + b = 1020
由上述代码可知,任何类型的数据和字符串进行拼接,结果都是字符串。
2、长整型变量
长整型变量是比整型变量范围更大的数据类型。
基本语法格式:
long 变量名 = 初始值;
代码示例:
long num = 12L;
long num1 = 12;
定义一个长整型变量,需在初始值后添加L,如num;否则编译器会将其默认为整形数据,如num1,此时会发生类型提升。
Java中,long类型占8个字节,即64位比特位,其中第一位为符号位,剩下的63位为数值位,其表示的数据范围是-263—263-1。
使用以下代码查看:
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808
3、双精度浮点型变量
基本语法格式:
double 变量名 = 初始值;
在java中,int除以int的值仍是int(会直接舍弃小数部分)。而若其中任意一个为double类型时,执行结果均为double类型。
int a = 1;
int b = 2;
System.out.println(a/b);//0
double a1 = 1.0;
int b1 = 2;
System.out.println(a1/b1);//0.5
double num = 1.1;
System.out.println(num * num);//1.2100000000000002
System.out.printf("%f",num2 * num2);//1.210000
Double型变量在java中占8个字节。
4、单精度浮点型变量
基本语法格式:
float 变量名 = 初始值;
代码示例:
float num = 1.0f;
定义一个单精度浮点型变量,需在初始值后添加f/F,如num;若不加f/F,即如12.8,java中默认其为double型变量。
Float型变量在java中占4个字节。
5、字符类型变量
基本语法格式:
char 变量名 = 初始值;
Java中,使用单引号+单个字母的形式表示字符字面值。
代码示例:
char ch = 'A';
也可以使用一个字符表示一个汉字:
代码示例:
char ch = '和';
在java中使用Unicode表示字符,因此一个字符占两个字节。
6、字节类型变量
基本语法格式:
byte 变量名 = 初始值;
字节类型表示的也是整数,只占一个字节,表示范围为-128—127。
使用以下代码查看:
System.out.println(Byte.MAX_VALUE);
System.out.println(Byte.MIN_VALUE);
在java中,小于四个字节的整数类型进行运算时,会先提升成整型。
代码示例1:
byte a = 10;
byte b = 20;
byte c = a+b;//此处报错“java: 不兼容的类型: 从int转换到byte可能会有损失”
//因为此处b+c被提升为整型,范围比byte类型大,所以不能将整型赋值与byte类型,所以此处报错
代码示例2:
byte num = Byte.MAX_VALUE+1;//此处报错“java: 不兼容的类型: 从int转换到byte可能会有损失”
//因为Byte.MAX_VALUE和1均为整型
System.out.println(Byte.MAX_VALUE+1);//此处运行成功,并打印128
7、短整型变量
基本语法格式:
short 变量名 = 初始值;
Short占用两个字节,数据范围是-32768—32767。
使用以下代码查看:
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
8、布尔类型变量
基本语法格式:
boolean 变量名 = 初始值;
Boolean类型的变量只有两种取值,true表示真,false表示假。
Java中boolean类型和int不能相互转换,不存在1表示true,0表示false的用法。
代码示例:
boolean value = true;
System.out.println(value+1);//此处报错
//java: 二元运算符 '+' 的操作数类型错误
// 第一个类型: boolean
// 第二个类型: int
9、字符串类型变量
基本语法格式:
String 变量名 = 初始值;
Java只用双引号+若干字符的方式表示字符串字面值。
String不是基本类型,而是引用类型。
字符串中的一些特定的字符需要进行转义。
转义字符示例:
String str = "My name is \"张三\"";
//输出:My name is "张三"
转义字符 | 解释 |
---|---|
\n | 换行 |
\t | 水平制表符 |
\’ | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
字符串中的 + 操作,表示字符串拼接:
String a = "hello";
String b = " world";
String str = a+b;
System.out.println(str);//输出:hello world
常量
常量在运行时不能发生改变。主要有以下两种体现形式:
1、字面值常量
10 //int 十进制
014 //int 八进制,由数字0开头
0xb2 //int 十六进制,由0x开头
10L //long
1.0 //double 也可以写作1.0d,1.0D
1.5e2 //double 科学计数法,等同于1.5 * 10^2
true //boolean
'a' //char 单引号中只有一个字符
"asd" //String 双引号中可以有多个字符
2、final关键字修饰的常量
final int A = 10;
A = 20;//此处编译出错
final修饰的常量名全大写,且只能被初始化一次,之后在运行过程中不能被修改。使用时一定要初始化!
运算符
1、算术运算符
基本四则运算符 +,-,*,/
1)int/int结果仍然是int(直接舍弃小数部分)
int a = 1;
int b = 2;
System.out.println(a/b);//结果为0
2)0不能作为除数
int a = 10;
int b = 0;
System.out.println(a/b);//此处报错(编译时可通过,运行时报错)
//Exception in thread "main" java.lang.ArithmeticException: / by zero
//at test01.main(test01.java:22)
3)%表示取余
System.out.println(10%3);//1
System.out.println(-10%3);//-1
System.out.println(10%-3);//1
System.out.println(-10%-3);//-1
System.out.println(11.5%2.0);//1.5
增量赋值运算符 +=,-=,*=,/=,%=
int a = 10;
a += 2;
System.out.println(a);//12
a -= 2;
System.out.println(a);//10
a *= 2;
System.out.println(a);//20
a /= 2;
System.out.println(a);//10
a %= 2;
System.out.println(a);//0
自增/自减运算符 ++,–
int a = 10;
int b = a++;
System.out.println(a);//11
System.out.println(b);//10 先赋值,再自增
int c = 11;
int d = ++c;
System.out.println(c);//12
System.out.println(d);//12 先自增,再赋值
---------------------------------------------------
int i = 10;
i = i++;
System.out.println(i);//10
2、关系运算符
关系运算符主要有:==,!=,<,>,<=,>=
**注意:**关系运算符的表达式返回值都是boolean类型,即true和false。
int a = 15;
int b = 20;
System.out.println(a==b);//false
System.out.println(a!=b);//true
System.out.println(a>b);//false
System.out.println(a<b);//true
System.out.println(a>=b);//false
System.out.println(a<=b);//true
3、逻辑运算符
逻辑运算符主要有:&&,||,!
逻辑与
两个操作数都为true,结果才为true,否则结果是false。
int a = 15;
int b = 20;
int c = 56;
System.out.println(a>b && b>c);//false
System.out.println(a<b && b<c);//true
遵循短路求值的规则:一旦表达式1为假,那么表达式2不会被执行。
逻辑或
两个操作数都是false,结果才为false,否则结果是true。
int a = 15;
int b = 20;
int c = 56;
System.out.println(a>b || b>c);//false
System.out.println(a>b || b<c);//true
遵循短路求值的规则:一旦表达式1为真,那么表达式2不会被执行。
逻辑非
只作用于布尔类型。
操作数为true,结果为false;操作数为false,结果为true。
int a = 15;
int b = 20;
int c = 56;
System.out.println(!(a<b));//false
System.out.println(!a<b);//此处报错“java: 一元运算符 '!' 的操作数类型int错误”
//此处!作用于a,a不是boolean类型
&和|
当操作数为boolean的时候,也表示逻辑运算,但是不支持短路求值,即两个表达式都会被执行到,任何一个表达式有错程序都会报错。
4、位运算符
Java中对数据操作的最小单位是二进制位,而不是字节。
位运算符主要有:&,|,~,^
按位与 &
若两个二进制位都是1,则结果为1,否则结果为0。
int a = 10;
int b = 20;
System.out.println(a&b);//0
按位或 |
如果两个二进制位都是0,则结果为0,否则结果为1。
int a = 10;
int b = 20;
System.out.println(a|b);//30
按位取反 ~
如果该位为0,则结果为1,如果该位为1,则结果为0。
int a = 10;
int b = 20;
System.out.println(~a);//-11
负数在计算机中的存储方式
负数在内存中以补码的方式存储。
计算方法:原码—反码(符号位不变,数值位分别“按位取反”)—补码(反码的末位加1)
例如:十进制-11
按位异或 ^
如果两个数字的二进制位相同,则结果为0,否则结果为1。
int a = 10;
int b = 20;
System.out.println(a^b);//30
5、条件运算符
条件运算符只有一个:表达式1?表达式2:表达式3
代码示例:
int a = 10;
int b = 20;
int c = a>b?a:b;
System.out.println(c);//20
6、移位运算
移位运算符有:<<,>>,>>>
左移 <<
移除对应二进制的最左侧位,并在最右侧补0。
int a = 10;
System.out.println(a << 1);//20
int c = -11;
System.out.println(c<<1);//-22
由上述结果可知,正数/负数每左移一次,相当于原数值扩大二倍,即左移乘二。
右移 >>
移除对应的二进制的最右侧位,并在最左侧补符号位(整数补0,负数补1)。
int b = 20;
System.out.println(b >> 1);//10
int d = -11;
System.out.println(d>>1);//-6
正数每右移一次,相当于原数值除以二,即右移除二。
无符号右移 >>>
最右侧位不要了,在最左侧补0。
**注:**没有无符号右移。
int a = 10;
int c = -11;
System.out.println(a>>>1);//5
System.out.println(c>>>1);//2147483642