单字符类型
转义字符
\n:换行
\r:回车
\t:Tab键
\\:\
\":"
\':'
\b:删除键Backspace
字符和字符串
char c = '尚';
String s = '尚';//错误的,哪怕是一个字符,也要使用双引号
char c2 = '';//错误,单引号中有且只能有一个字符
String s2 = "";//可以,双引号中可以没有其他字符,表示是空字符串
ASCII编码
字符 | 数值 |
---|---|
0 | 48 |
A | 65 |
a | 97 |
进制
- 二进制:0b开头
- 八进制:0开头
- 十六进制:0x开头
十进制转二进制
二进制转十进制
转换关系
8 bit = 1 Byte
1024 Byte = 1 KB
1024 KB = 1 MB
1024 MB = 1 GB
1024 GB = 1 TB
基本数据类型转换
自动转换
强制类型转换
int i = (int)3.14;//强制类型转换,损失精度
double d = 1.2;
int num = (int)d;//损失精度
int i = 200;
byte b = (byte)i;//溢出
特殊类型的强制转换
任意数据类型的数据与String类型进行“+”运算时,结果一定是String类型
System.out.println("" + 1 + 2);//12
但是String类型不能通过强制类型()转换,转为其他的类型
String str = "123"; int num = (int)str;//错误的 int num = Integer.parseInt(str);//借助包装类的方法才能转
运算符
+ 的两种用法
- 两边都是数值的话,
+
就是加法的意思 - 两边至少有一边是字符串得话,
+
就是拼接的意思
i++ 和 ++i
- ++在前,先自加,后使用
- ++在后,先使用,后自加
案例1
public class LogicExer1{
public static void main(String[] args){
int x = 1;
int y = 1;
//x==2 ,x++ false x = 2 左边为false
//右边继续
//++y y==2 y=2 y==2成立 右边为true
//false & true 结果false
if(x++==2 & ++y==2){
x =7;
}
System.out.println("x="+x+",y="+y);//x=2,y=2
}
}
public class LogicExer2{
public static void main(String[] args){
int x = 1,y = 1;
//x==2,x++ 左边条件为false,x=2
//因为短路与,右边不算
//false && ? 结果是false
if(x++==2 && ++y==2){
x =7;
}
System.out.println("x="+x+",y="+y);//x=2,y=1
}
}
public class LogicExer3{
public static void main(String[] args){
int x = 1,y = 1;
//x==1,x++ 左边为true,x=2
//因为是逻辑与,右边继续
//++y, y==1 y=2 右边为false
//条件true | false,最终为true
if(x++==1 | ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y);//x=7,y=2
}
}
public class LogicExer4{
public static void main(String[] args){
int x = 1,y = 1;
//x==1,x++ 左边为true,x=2
//因为是短路或,左边为true,右边就不看了
//整个条件为true
if(x++==1 || ++y==1){
x =7;
}
System.out.println("x="+x+",y="+y);//x=7,y=1
}
}
案例2
public class LogicExer5{
public static void main (String [] args) {
boolean x = true;
boolean y = false;
short z = 42;
if((z++==42)&&(y==true)) z++; //z=43
if((x=false) || (++z==45)) z++; //false || false = false
System. out.println("z="+z);//44
}
}
class Test4_2 {
public static void main (String [] args) {
boolean x = true;
boolean y = true;
short z = 42;
if(y=true){
if((z++==42)&&(y==true)){
z++; //z=44
}
}
if((x=false) || (++z==45)){
z++;
}
System. out.println("z="+z);//46
}
}
案例:获取一个四位数的个、十、百、千位
public class Test01 {
public static void main (String [] args) {
int num = 1234;
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100 % 10;
int qian = num / 1000 % 10;
System.out.println(num + "个位上的数字是:" + ge);
System.out.println(num + "十位上的数字是:" + shi);
System.out.println(num + "百位上的数字是:" + bai);
System.out.println(num + "千位上的数字是:" + qian);
}
}
&& 和 &
- 左边为false,则右边就不看
|| 和 |
- 左边为true,则右边就不看
^(异或)
- 相同为false,不同为true
<<
- 左移几位就相当于乘以2的几次方
>>
- 右移几位就相当于除以2的几次方
>>>
- 往右移动后,左边空出来的位直接补0,不看符号位
三元运算符
public static void main(String[] args) {
int i = (1==2 ? 100 : 200);
System.out.println(i);//200
int j = (3<=4 ? 500 : 600);
System.out.println(j);//500
}