文章目录
一些简单的字符串问题
1、转义字符
public static void main(String[] args) {
String str1 = "我是"逍遥"";//编译错误
String str2 = "我是\"逍遥\"";
System.out.println(str2);//我是"逍遥"
}
当我们需要在打印我是"逍遥"时,使用str1来编写代码时会编译错误。系统会把这个字符串看成两个部分:“我是” 和 逍遥"", 不符合正确的编写方式。
需要用 \ 将" 转义,一个 \ 转义一个"。转义理解的话就是转变符号的意义。
2、字符串转整型
public static void main(String[] args) {
String str1 = "10";
//方法一
int tmp1 = Integer.parseInt(str1);
//方法二
int tmp2 = Integer.valueOf(str1);
}
同理,当需要将double等类型转换为字符串类型时,一样可以调用这些方法。(char类型不可以,它本身就是字符类型);
3、整型转字符串
public static void main(String[] args) {
int a = 10;
//方法一
String str1 = String.valueOf(a);
//方法二
String str2 = a + "";
}
方法二是因为字符串+其他内容,其他内容会被自动转换为字符串。
4、强制类型转换
public static void main(String[] args) {
int a = 5;
int b = 2;
System.out.println(a/b);//2
System.out.println((float) a/b);//2.5
System.out.println(a/(float)b);//2.5
System.out.println((float)(a/b));//2.0
}
这就是强制类型转换的一种情况。
运算符
1、自增/自减运算符
public static void main(String[] args) {
int a = 10;
a++;
System.out.println(a);//11
}
public static void main(String[] args) {
int a = 10;
int b = a++;// b = a ; a = a+1;
System.out.println(b);//10
public static void main(String[] args) {
int a = 10;
int c = ++a;// a = a+1 ; c = a
System.out.println(c);//11
}
n++是先赋值,再+1;++n是先+1,再赋值。
n- - 也是同样的道理
2、移位运算符
右移:>>
左移:<<
无符号右移 :>>>
public static void main(String[] args) {
int a = 12;
int b = a >> 1;
System.out.println(b);//6
int c = b >> 1;
System.out.println(c);//3
int x = 5;
int y = x << 1;
System.out.println(y);//10
int z = y << 1;
System.out.println(z);//20
int i = -100;
System.out.println(i >> 1);//-50
System.out.println(i >>> 1);//2147483598
}
移位运算符是将数字转化为二进制数然后进行移位
根据代码可以得到规律:
右移>>相当于除法: b = 12/2, c = 12/2^2
左右<<相当于乘法: y = 5 * 2, z = 5*2^2
而无符号右移和右移是一样的,不过无符号右移添加的符号位不管正负都是0。
3、位运算符
按位与:&
按位或:|
按位取反:~
按位疑惑:^
public static void main(String[] args) {
int a = 10;
int b = 11;
System.out.println(a & b);//10
System.out.println(a | b);//11
System.out.println(~a);//-11
System.out.println(a ^ b);//1
}
位运算符是将数字转化为2进制然后进行运算
~:将二进制位每一位取反,1—>0,0—>1。符号位不变
4、逻辑运算符
逻辑或:&&
逻辑与:| |
逻辑非:!
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(a < 0 && b > 0);//false
System.out.println(a < 0 || b > 0);//true
System.out.println(!(a > 0));//false
}
布尔表达式1 && 布尔表达式2。两个表达式为真结果才为真
布尔表达式1 | | 布尔表达式2。 一个表达式为真结果就是真
!布尔表达式 。 和布尔表达式结果相反
当位运算符& | 的两边也是布尔表达式时,也可以当作逻辑运算符使用,但是它们不支持短路求值。
短路求值:System.out.println(a > 0 || b > 0);因为是| | ,所以当知道布尔表达式1是true时,不需要判断布尔表达式2。System.out.println(a < 0 && b > 0),当知道布尔表达式1时false时,不需要判断布尔表达式2。
5、三目运算符
public static void main(String[] args) {
int a = 10;
int b = 20;
int max = a > b ? a : b;
System.out.println(max);//20
}
布尔表达式? a : b;
如果布尔表达式为true,则返回a,如果为false,则返回b。
六:坑
1、先看代码。
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println("sum= "+a+b);//sum= 1020
System.out.println(a+b+"<———sum"); //30<———sum
}
}
在java中打印时候如果是字符串用+拼接其他内容,那么其他内容也会被转化为字符串。所以我们在使用时不要踩坑,例如上面代码中的第一个打印。
2、再来一个代码(面试题)
public static void main(String[] args) {
int a = 10;
a++;
System.out.println(a);//11
}
public static void main(String[] args) {
int a = 10;
a = ++a;
System.out.println(a);//11
}
public static void main(String[] args) {
int a = 10;
a = a++;
System.out.println(a);//10
}
如果要理解的话需要反汇编知识。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端