的小编总结,一、害死人的自动递增,不偿命的自动递减
记得参加工作的第二年,我的同事小二就因为把“前缀递增”写成了“后缀递增”被一顿痛骂之后拉出去祭天了。至今我还耿耿于怀,因为我也是参与者之一(当时小王准备使用p = p + 1,但我劝小王使用p++,因为自动递增更加简洁);但小二很讲义气,没有把我捅出去,我才苟且活到今日。往事不堪回首,但为了以后的Java程序员着想,我决定忍着记忆的苦涩把小二当年的那段代码记录下来:
public static void main(String[] args) {
int p = 0;
calculate(p);
}
public static void calculate(int p) {
if (p < 3) {
// 其他
calculate(p++);
}
}
按照以上的代码来看,这是一个死循环,calculate迭代是不会跳出的,直到程序报错。为什么会这样呢?
因为后缀递增会先生成值,再执行运算;也就是p++这个表达式的结果还是p.但前缀递增会先执行运算,再生成值;也就是++p这个表达式的结果是p+1.
那以上代码正确的写法是什么呢?答案如下:
public static void main(String[] args) {
int p = 0;
calculate(p);
}
public static void calculate(int p) {
if (p < 3) {
// 其他
calculate(++p);
}
}
二、我俩到底等不等?
==用来判断操作符两侧的值是否相等--老生常谈的话题了;凡是遇到字符串比较,请使用equals()方法,这个大家都已经心知肚明了,不需要再强调;但对于Integer类型的值进行比较时,还需要特别强调一下;因为针对实际的项目来说,遇到数据库中字段类型为int时,Java对象与之对应的属性需要声明是Integer(注意,不是int),Integer在比较是否相等时不能使用==!为什么呢?请看以下代码:
Integer q = 127;
Integer r = 127;
System.out.println(q == r); // true
q = 128;
r = 128;
System.out.println(q == r); // false
为什么一个是true,一个是false?
因为Integer作为常量时,对于-128到127范围之间的数,Java会对其进行缓存;也就是说Integer q = 127时,Java会将其存放在缓存中,当执行Integer r = 127时,Java发现缓存中存在127这个数了,就直接取出来赋值给r,所以此时的q == r,也就是说System.out.println(q == r)此时输出true.当q和r不在-128到127之间的范围时,Java会通过new Integer()来创建该数值,所以q和r被赋值为128时q != r,也就是说System.out.println(q == r)此时输出false.
针对这个情况,在判断Integer是否相等时,尽量使用以下代码来进行判断:
System.out.println(q.intValue() == r.intValue());
System.out.println(q.compareTo(r) == 0);
注意:前提条件是q和r都不为null.
三、跳过的位移运算符
对不起,我选择跳过!
四、特别的三元操作符
来看这样一段代码:
boolean flag = true;
System.out.println(flag ? “点赞转发分享” : “踩死你丫的”);
三元操作符也称为条件操作符,它很简洁,也很特别,因为它有三个操作数:
boolean-exp ? value0 : value1
?前面是布尔表达式,?后面是两个可选值(用:隔开),布尔表达式为true,则三元操作符的结果是value0,否则是value1.
以上就是给大家做的内容详解,更多关于IT的学习,请继续关注