1.多行注释不能嵌套多行注释,与c语言注释形式相同
2.数据类型:
基本数据类型:布尔型(boolean)1byte 只用最后1bit表示真假;字符型(char)2byte;数值型(byte(1byte), short(2byte), int(4byte), long(8byte), float(4byte), double(8byte))
引用数据类型:类(class),接口(interface),数组(array),统一为4byte,记录其引用对象的地址
注意:
整数默认int,小数默认double;long a = 1234567890l; float b = 2.1f;否则报错
byte b = 3;int型常量3自动转换为byte
b = b + 1;错误,b自动类型提升为int,结果为int 型变量不能转换为byte,因为变量的值是不确定的
b = (byte) (b + 1);正确,强制类型转换,由于变量值不确定,有可能丢失精度,慎用
3.算数逻辑运算
%:模运算(取余数),被模数%模数,其结果小于模数,可用于控制数据的范围。如果被模数小于模数,其结果为被模数
b = a ++;:tmp = a; a = a + 1; b = tmp;
+:连接符 "字符串"+.. System.out.println("1+1="+2+2) 输出:1+1=22 System.out.println("1+1="+(2+2)) 输出:1+1=4
+=:赋值运算符,short s = 4;s = s + 4;编译错误,丢失精度,但short s = 4; s += 4;编译通过,赋值运算符进行了类型自动转化
比较运算符:返回结果boolean类型:true or false
逻辑运算符:与&,或|,非!,异或^(相同为false,相异为true)
&:无论左边运算结果是什么,右边都参与运算
&&:当左边运算结果为false时,右边不参与运算
|:无论左边运算结果是什么,右边都参与运算
||:当左边运算结果是true时,右边不参与运算
位运算:<< 左移,>>右移(保证原符号位),加快2的次幂运算
>>>无符号右移(空位均补0)操作二进制位,将二进制转化为八、十六进制
&按位与:获取二进制中的1
^按位异或:一个数异或另一个数两次后为原值,可用于简单的加密解密
~按位取反:取反加1求负数补码
三元运算符:求三个数的最大值,max = ( a > b ? a : b ) > c ? ( a > b ? a : b ) : c;
可以理解为if-else的简写格式,但不是所有的if-else都可以简化三元运算符,因为三元运算符必须有结果,而if-else可以没有,如输出到屏幕
/*
需求:将十进制转化为八进制
思路:1.通过按位与&和无符号右移>>>依次获取该数3位对应的二进制位
2.直到该数的二进制位全为0
*/
import java.util.*;
class Convert{
public static void main(String[] args){
System.out.println("请输入一个整数:");
Scanner input = new Scanner(System.in);//Scanner类
int x = input.nextInt();//键盘输入一个整数
int size=11;//int占4byte,化为八进制为11位
int[] tmp = new int[size];
int i;
for(i=0;i<size;i++){
tmp[i]=0;
}//初始化数组
i=0;
while(x!=0 && i<size){
tmp[i]=x&7;//去二进制x的末三位
x = x >>> 3;//x无符号右移三位
++i;
}
System.out.println("八进制:");
for(i=size-1;i>=0;i--){
System.out.print(tmp[i]);
}//逆序输出,得到相应的八进制
}
}
/*
需求:不用第三方变量交换两整型变量的值
思路1:利用第三方变量
思路2:求和,再分别作差
弊端:当两个数据较大时,可能超出int范围
思路3:利用a^b^b=a(a^b^b=b^a^b=b^b^a)
*/
class Exchange{
public static void main(String[] args){
int a = 1;
int b = 2;
/* a = a + b;//a = 3
b = a - b;//b = 1
a = a - b;//a = 2
*/
a = a^b;
b = a^b;//b = a^b^b = 1
a = a^b;//a = a^b^1 = 2
System.out.println("a="+a+" b="+b);
}
}