众所周知任何数据类型都可以向String转型
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("1+2=" + a + b);
}
//1+2=12
由于输出语句中碰到了字符串,此时的+被视为字符串连接的含义所以会导致输出错误
想要使输出结果正确用括号即可,即输出时先计算a+b的值
System.out.println("1+2="+(a + b));
//1+2=3
数据类型的强转
其格式为
(数据类型)变量;
也称之为显式转换。
要注意的是这种转型可能会丢失精确度所以Java不会自动做这些数据类型的转换,所以称之为强制转换。
下面为浮点型强制转型为整型。
public static void main(String[] args) {
float a=30.1F;
System.out.println( (int) a);
}
//30
括号运算符
运算符 | 描述 |
---|---|
() | 提高运算优先级 |
同数学意义上的括号类似。
一元运算符
运算符 | 描述 |
---|---|
- | 负 |
! | 非 |
+ | 正 |
public static void main(String[] args) {
int a = 10;
int b = -20;
boolean c = true;
System.out.println(+a);
System.out.println(-a);
System.out.println(+b);
System.out.println(-b);
System.out.println(c);
System.out.println(!c);
}
/*
10
-10
-20
20
true
false
*/
值得注意的是为什么+b输出是-20 而-b输出却是20呢?
我个人理解的相对于数值类型来说 +表示的是其本身。
而-表示的是其取反,与布尔类型的!是取反相似。
算术运算符
运算符 | 描述 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余 |
关系运算符
运算符 | 描述 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
== | 相等 |
!= | 不相等 |
一般关系运算符在if语句中使用较多
if (布尔表达式){
//语句;
};
其中,一个数学意义上完整并结果具有布尔值(true/false)的式子称之为布尔表达式
public static void main(String[] args) {
int a=1;
int b=2;
if (a==2){
System.out.println("不相等,这条语句不会输出");
}
}
自增自减
五星⭐⭐⭐⭐⭐警告非常重要
运算符 | 描述 |
---|---|
++ | 自增 |
-- | 自减 |
a=a+1;
a++;
//在逻辑意义上 这两条语句是类似的
自增自减的放置顺序不同也会导致结果的不同
public static void main(String[] args) {
int a=1;
System.out.println(a++);//执行完这条语句后再+1
System.out.println(a);
}
/*
1
2
*/
//============================================================================
public static void main(String[] args) {
int a=1;
System.out.println(++a);//先+1再执行这条语句
}
//2
自减与自增相同不再叙述
a--;
先执行语句再自减
--a;
先自减再执行语句
逻辑运算符
运算符 | 描述 |
---|---|
% | 与 |
%% | 短路与 |
| | 或 |
|| | 短路或 |
! | 非 |
!属于一元还是逻辑我也搞不清....哎,搜了一下都包括它
Java开发实战经典(李兴华版)上的逻辑运算符不包括! 如其他书籍有注明请评论解惑!谢谢
//一般来说逻辑运算符涉及到2个布尔表达式
布尔表达式1 && 布尔表达式2
举栗
public static void main(String[] args) {
int a = 1;
int b = 2;
if (a==1 & b==2) {
System.out.println("两个结果都为真,&&才是真");
}
}
//============================================================================
public static void main(String[] args) {
int a = 1;
int b = 2;
if (a==1 | b==3) {
System.out.println("一个为真,||就是真");
}
}
//============================================================================
public static void main(String[] args) {
int a = 1;
if (a!=2) {
System.out.println("不等于就是真");
}
}
/*
建议涉及多个布尔表达式的时候用括号概括,即:
(布尔表达式1) && (布尔表达式2)
*/
短路是某个意义上的优化,不废话直接上栗子
//众所周知除0会报错。
public static void main(String[] args) {
int a = 1;
System.out.println(1/0);
}
//Exception in thread "main" java.lang.ArithmeticException: / by zero
//使用与,&
public static void main(String[] args) {
int a = 1;
if (a==1 & (1/0==0)){
System.out.println("使用正常的与");
}
}
//Exception in thread "main" java.lang.ArithmeticException: / by zero
//使用短路与,&&
public static void main(String[] args) {
if (2!=2&&1/0==0){
System.out.println("使用短路与");
}
}
//这里没用报除0错误
短路与,检测到布尔表达式1为false所以不再进行后续的判断
对于&(与)来说,要求所有的布尔表达式都去判断布尔值。如果使用%%(短路与),布尔表达式1为false就不再进行后续的判断。
对于|(或)来说,要求所有的布尔表达式都去判断z布尔值。如果使用||(短路或),布尔表达式1为true就不再进行后续的判断。
三目运算符
布尔表达式?取真值的结果:取假值的结果;
public static void main(String[] args) {
int a = 1;
int b = 2;
int max = a > b ? a : b;
System.out.println(max);
}
//也可也写为
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println(a > b ? a : b);
}
要注意的是但三目运算符不能单独出现,必须用变量接收或直接打印
public static void main(String[] args) {
int a = 1;
int b = 2;
a > b ? a : b;
}
//报错 三目运算符单独出现不能作为合法的Java语句
//============================================================================
//三目运算符其实是if
public static void main(String[] args) {
int a = 1;
int b = 2;
int max=0;
if (a > b) {
max = a;
} else {
max = b;
}
System.out.println(max);
}
//上述代码等价于
public static void main(String[] args) {
int a = 1;
int b = 2;
int max = a > b ? a : b;
System.out.println(max);
}