常规的算数运算符有加减乘除取余赋值等(+-*/%=),这些操作符对于所有的基本数据类型都是可以直接使用的,但是对于对象还能有判定内存地址是否相等,是否不等,赋值(==,!=,=)操作符可以用。对于String这个特殊的引用对象类型,还可以使用拼接符(+),这是Java提供的一个语法糖,反编译字节码后,会发现”+“号会被StringBuffer的append方法代替。
发生这种现象是因为Java是值传递的,
对于基本数据类型,一个变量其实是指向堆栈中特定的值,在进行a=b这种赋值操作的时候,实际上是将b的值拷贝给了a变量。
对于引用数据类型,m=n这个操作,是将变量n所指向的对象的地址赋值给了m,这时候如果对m,n所指向的是同一个内存地址的同一个对象,无论是通过m还是n对对象有任何改变,所有指向该对象的引用(即变量)都会将这次的改变体现出来。
class Tank{
int level;
}
public class Demo{
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 12;
t2.level = 34;
print("--1--"+t1.level+"---"+t2.level);
t1 = t2; // t1 变量的指针指向了t2 的所指向的那个对象
t1.level = 56; // 通过t1 对对象作出改变
print("--2--"+t1.level+"---"+t2.level);
}
// 打印结果
// --1--12---34
// --2--56---56
public class Test {
public static void f(int x) {
x = 12;
}
public static void f2(String args) {
args = "1234";
}
public static void f3(Bean bean) {
bean.x = 123;
}
public static void main(String[] args) {
int y = 44;
f(y);
System.out.println(y);
String str = "xxx";
f2(str);
System.out.println(str);
Bean bean = new Bean();
bean.x = 111;
f3(bean);
System.out.println(bean.x);
}
}
class Bean{
public int x;
}
// 输出结果为
44
xxx
123 //为什么这个值发生了变化,而上面两个没有呢
class Demo{
public static void main(String[] args){
int i = 1;
System.out.println("i: " + i); //1
System.out.println("++i:" + ++i); //2
System.out.println("i++:" + i++); //2
System.out.println("i: " + i); //3
System.out.println("--i:" + --i); //2
System.out.println("i--:" + i--); //1
}
}
public class TestOne{
public static void main(String[] args) {
Integer i1 = new Integer(1);
Integer i2 = new Integer(1);
System.out.println(i1 != i2); //true
System.out.println(i1 == i2); //false
System.out.println(i1 > i2); //false
System.out.println(i1 < i2); //false
System.out.println(i1.equals(i2)); //true
}
}
class Demo{
int i = 0x2f; // 0x或者0X 开头表示该数字为十六进制
int j = 0177; // 0 开头表示该数字为八进制
int m = 0b101; // 0b 开头表示该数字为二进制
int n = 100; // 默认情况下表示为十进制
long l = 123123123;
long l1 = 234234234L;
long l2 = 345345345L;
float f = 123.234;
float f1 = 12.333f;
float f2 = 23.555F;
double d1 = 1.234d;
double d2 = 2.345D;
}
先将数字转换为二进制,然后从右向左逐位取一位运算,将1看为true,0看为false。则位运算符与逻辑运算符类似,^可以看成如果两位相同,则取0,否则取1.
class Demo{
public static void main(String[] args){
System.out.println(1&1); // 1
System.out.println(1&0); // 0
System.out.println(0&1); // 0
System.out.println(0&0); // 0
System.out.println(1|1); // 1
System.out.println(1|0); // 1
System.out.println(0|1); // 1
System.out.println(0|0); // 0
System.out.println((0b11)^(0b11)); // 0
System.out.println((0b10)^(0b10)); // 0
System.out.println((0b11)^(0b10)); // 1
System.out.println((0b11)^(0b00)); // 3
// ~按位去反 输入0得1 输入1得0
}
}
有符号的左移、右移(<<,>>)和无符号的右移(>>>)
class Demo{
public static void main(String[] args){
System.out.println(Math.round(-29.3)); //-29
System.out.println(Math.round(-29.5)); //-29
System.out.println(Math.round(-29.7)); //-29
System.out.println(Math.round(29.3)); //29
System.out.println(Math.round(29.5)); //30
System.out.println(Math.round(29.7)); //30
}
}
原文:https://www.cnblogs.com/Pikzas/p/12154360.html