JAVA学习笔记(二) - 运算符
变量与常量
变量的声明和赋值
/*
* 变量的声明和赋值
*/
public class Test
{
public static void main(String[] args)
{
// 1-可以声明的同时,对变量赋值:int x = 10;
//局部变量,变量名符合命名规则。
//推荐使用此种方式。
int x = 10;
// 2-可以先声明,再赋值:int x; x = 10;
int y;//变量的声明
y = 20;//将20赋值给y指向的内存空间
// 3-可以一行声明多个变量: int x, y, z;由,分隔
// int a, b, c, d, e;
// 4-一行声明多个变量,且为所有变量或部分变量赋值:由,分隔
int a, b = 10, c, d = 20, e = 100;
// 5-建议:一行只声明一个变量,且在声明的同时,为其初始化。
int z = 5;
//6-如果变量在声明的时候,不初始化,则编译通不过
//报The local variable xx may not have been initialized
int xx;
xx = 100;
System.out.println(xx);//编译错误。
}
}
常量
/*
* 常量
*/
public class Test
{
public static final int MAX_AGE = 25;
public static void main(String[] args)
{
//1-使用final来定义Java中的常量。
//在声明的同时为常量名赋值。一旦赋值后,该常量名的值则不能修改。
final int BLOOD = 10;
// BLOOD = 100;//此时报错The final local variable BLOOD cannot be assigned.
//2-定义常量,可以先声明常量,再为常量赋值,注意,此种情况下,只能为常量名赋值一次。
final int AGE;
AGE = 20;
// AGE = 100;//第二次赋值,会报错。The final local variable AGE may already have been assigned
//关于常量名的命名-全部大写,如果多个单词,中间用_分割
final int MY_AGE = 20;
}
}
交换变量
/*
* 交换两个变量的值的方法
*/
public class Test
{
public static void main(String[] args)
{
int a = 10;
int b = 5;
//1-方法一
// int temp = 0;
// temp = a;
// a = b;
// b = temp;
// System.out.println("a = " + a + ", b = " + b);
//2-方法2
// a = a + b;//a = 15, b = 5;//注意,有可能出现数据溢出
// b = a - b;//a = 15, b = 10;
// a = a - b;//a = 5, b = 10;
// System.out.println("a = " + a + ", b = " + b);
//3-方法3
a = a ^ b;//a=10^5 b=5
b = a ^ b;//b=10 a=10^5
a = a ^ b;//a=5, b = 10
System.out.println("a = " + a + ", b = " + b);
}
}
字符串拼接
字符串拼接
/*
* 字符串拼接:区分哪些是可变的,哪些是不可变的,不可变的放入""内,可变的通过+连接
*/
public class Test
{
public static void main(String[] args)
{
System.out.println(10 + "aaa");//"10" + "aaa"="10aaa"
int a = 10;
int b = 5;
System.out.println("a + b = " + a + b);//"a + b = 105"
System.out.println(a + b + " = a + b");//"15 = a + b"
System.out.println("a + b = " + (a + b));//"a + b = 15"
System.out.println(a + " + " + b + " = " + (a + b));//10 + 5 = 15
//(10) + (5) = [15]
//"(" + a + ") + (" + b + ") = [" + (a + b) + "]"
System.out.println("(" + a + ") + (" + b + ") = [" + (a + b) + "]");
//[10 + 5] + (10 - 5) = [result]
//"[" + a + " + " + b + "] + (" + + a + " - " + b + ") = [" + ((a + b) + (a - b)) + "]"
//作业
//[a] + [b] / [a - b] = [result]
}
}
运算符
运算符-算术运算符
/*
* 运算符-算术运算符
*/
public class Test
{
public static void main(String[] args)
{
byte b1 = 10;
byte b2 = 20;
byte b3 = (byte)(b1 + b2);
int x = 100;
int y = 10;
System.out.println(x + y);//110
System.out.println(x - y);//90
System.out.println(x * y);//1000
System.out.println(x / y);//10
//%,以后经常使用再判断条件中,判断一个数能否被另一个数整除。
//如果整除则余数为0,否则,不为0
System.out.println(x % y);//0 求模或求余
int a = 12;
int b = 5;
// float b = 5.0f;
//两个数相除时,如果两个数都是整数,则结果一定是整数。
System.out.println(a / b);//2
int w = 10;
int q = 0;
//编译时,发现不了分母为0的错误。
//运行时错误,java.lang.ArithmeticException: / by zero
System.out.println(w / q);
}
}
自增:++与自减:–
/*
* 自增:++ ++a或a++ 相当于 a = a + 1;
* 自减:-- --a或a-- 相当于a = a - 1;
*
* ++/-- 位于操作数之前,该操作数参与运算时,会先自增/自减,再参与运算。
* ++/--位于操作数之后,该操作数先用当前值参与运算,再自增/自减
*/
public class Test
{
public static void main(String[] args)
{
int a = 10;
a++;//a = a + 1;
System.out.println(a);
int b = 10;
b--;//b = b - 1;
System.out.println(b);
//++/--位于操作数的前后
int aa = 10;
System.out.println(aa++);//10
System.out.println(aa);//11
int bb = 10;
System.out.println(++bb);//11
}
}
案例
/*
* ++或--案例
*/
public class Test
{
public static void main(String[] args)
{
int a = 10;
int b = 10;
int c = 10;
// a=11 b=11 c=9 b=10 a=10
// 10 11 10 10 11
int d = a++ + ++b + c-- + --b + a--;
System.out.println(d);
System.out.println(a++ + 1);//11 a=11
System.out.println(--b + --c + a++);//28 a=12,b=9,c=8
a += b;//a = a + b;
a -= b;//a = a - b;
a *= b;
a /= b;
a %= b;
byte b1 = 10;
byte b2 = 10;
// b1 = b1 + b2;//编译错误
// b1 = (byte)(b1 + b2);
b1 += b2;// b1 = (byte)(b1 + b2);
}
}
关系运算符
/*
* 关系运算符->,>=,<,<=,==,!=,instanceof
* 使用关系运算符,如果成立,返回true,否则,返回false
* 比较运算符,条件判断中比较常用。
*/
public class Test
{
public static void main(String[] args)
{
int a = 10;
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
boolean flag = true;
System.out.println(flag = false);//false
// flag = false;
// System.out.println(flag);
System.out.println(flag == true);//false
}
}
逻辑运算符
/*
* 逻辑运算符
*/
public class Test
{
public static void main(String[] args)
{
int a = 5;
int b = 6;
int c = 7;
//&& || 有短路的逻辑运算符,此种形式非常常用。
//&&逻辑与---全部条件都为true,结果才为true
//条件1 && 条件2 && 条件3...
//表示条件1,2,3同时为true,结果才为true。
System.out.println(a < b && b < c);//true
System.out.println(a < b && b > c);//false
System.out.println(a < b && b < c && a < c);//true
//||逻辑或---全部条件,都为false,结果才为false
//条件1 || 条件2 || 条件3...
//表示条件1,2,3任何一个为true,结果为true。
System.out.println(a < b || b < c);//true
System.out.println(a < b || b > c);//true
System.out.println(a < b || b < c || a < c);//true
System.out.println(a > b || b > c);//false
//& | 无短路的逻辑运算符
//&逻辑与---全部条件都为true,结果为true
System.out.println(a > b & b < c);//false
System.out.println(a < b & b < c);//true
//|逻辑或---全部条件,都为false,结果才为false
System.out.println(a < b | b < c | a < c);//true
System.out.println(a > b | b > c);//false
}
}
位运算符
/*
* 位运算符
* ~, ^, &, |
*/
public class Test
{
public static void main(String[] args)
{
int a = 5;
int b = 7;
// ~ 按位取反
// 5 00000000000000000000000000000101
// ~5 11111111111111111111111111111010--补码
// 11111111111111111111111111111001--反码
// 10000000000000000000000000000110--原码
System.out.println(~a);
// & 按位与 对应的位全部为1,结果为1.
// 特点:一个数与全1相与,得到其本身。全0相与,得到0
// 5 00000000000000000000000000000101
// 7 00000000000000000000000000000111
// &
// 00000000000000000000000000000101
System.out.println(a & b);
// | 按位或 对应位,全部为0,结果为0
// 5 00000000000000000000000000000101
// 7 00000000000000000000000000000111
// |
// 00000000000000000000000000000111
System.out.println(a | b);
// ^ 按位异或 对应的位,相同为0,不同为1
// 5 00000000000000000000000000000101
// 7 00000000000000000000000000000111
// ^
// 00000000000000000000000000000010
int c = a ^ b;
// System.out.println(c ^ a);//c^a=b
// System.out.println(c ^ b);//c^b=a
System.out.println(a ^ b);
// 文件 ^ 12341234---加密
// 加密后文件 ^ 12341234---解密
}
}
/*
* 移位运算符
* << 左移 10 << 2 表示10表示的二进制向左移动2位 10*2的2次方
* >> 右移 10 >> 2表示10的二进制向右移动2位,10/2的2次方
* >>> 无符号右移 10 >>> 2表示10的二进制向右移动2位, 10/2的2次方。
*/
public class Test
{
public static void main(String[] args)
{
int a = 5;
int b = -5;
// << 有符号左移
// 5 << n 高位去掉n位,低位以0补n位,相当于x乘以n个2;
// 5 00000000000000000000000000000101--补码
// <<2 00000000000000000000000000010100
System.out.println(a << 2);
// -5 10000000000000000000000000000101--原码
// -5 11111111111111111111111111111010--反码
// 11111111111111111111111111111011--补码
// <<2 11111111111111111111111111101100--移位后补码
// 11111111111111111111111111101011--移位后反码
// 10000000000000000000000000010100--移位后原码
System.out.println(b << 2);
int x = 16;
int y = -16;
// >> 有符号右移
// 5 >> n 低位去掉n位,高位以符号位补n位,相当于x除以n个2;
//16 00000000000000000000000000010000
// >>2 00000000000000000000000000000100
System.out.println(x >> 2);
// -16 10000000000000000000000000010000
// 11111111111111111111111111101111--反码
// 11111111111111111111111111110000--补码
//-16>>2 11111111111111111111111111111100--移位后的补码
// 11111111111111111111111111111011--移位后反码
// 10000000000000000000000000000100--移位后原码
System.out.println(-16 >> 2);
// >>> 无符号右移
// 16 >>> 2 低位去掉n位,高位以0补n位,相当于x除以n个2;
System.out.println(x >>> 2);
// -16 10000000000000000000000000010000
// 11111111111111111111111111101111--反码
// 11111111111111111111111111110000--补码
//-16>>>2 00111111111111111111111111111100
System.out.println(y >>> 2);
// 2 << 5;
// 62-63=1;
}
}
条件运算符
/*
* 条件运算符:
* 条件表达式?返回值1:返回值2
*/
public class Test
{
public static void main(String[] args)
{
//条件运算符一定会返回一个值。
int a = 10;
int b = 5;
int c = a > b? a : b;
System.out.println(c);
boolean flag = false;
int x = flag?10:20;
System.out.println(x);
String str = 10 < 20 ? "10 < 20" : "10 > 20";
System.out.println(str);
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。