java培训就是害人的_害死人的自动递增,不偿命的自动递减

的小编总结,一、害死人的自动递增,不偿命的自动递减

记得参加工作的第二年,我的同事小二就因为把“前缀递增”写成了“后缀递增”被一顿痛骂之后拉出去祭天了。至今我还耿耿于怀,因为我也是参与者之一(当时小王准备使用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的学习,请继续关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,你可以使用 `Graphics2D` 类的 `drawString` 方法来在图像上绘制字符串。下面是一个示例代码: ```java import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; public class DrawStringExample { public static void main(String[] args) { int width = 240; int height = 240; BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g = image.createGraphics(); g.setColor(Color.WHITE); g.fillRect(0, 0, width, height); g.setColor(Color.RED); g.setFont(new Font("Arial", Font.PLAIN, 20)); for (int i = 0; i < 10; i++) { g.clearRect(0, 0, width, height); g.drawString(Integer.toString(i), 50, 50); try { File output = new File("number_" + i + ".png"); ImageIO.write(image, "png", output); } catch (Exception e) { e.printStackTrace(); } } g.dispose(); } } ``` 在这个例子中,我们创建了一个大小为 240x240 的 `BufferedImage` 对象,并获取了它的 `Graphics2D` 对象。然后,我们使用 `setColor` 方法设置了绘图颜色为白色,并使用 `fillRect` 方法填充了整个图像。接着,我们使用 `setColor` 方法将绘图颜色设置为红色,并使用 `setFont` 方法设置了字体为 Arial、大小为 20 的普通字体。最后,我们使用一个循环逐个将数字转换成字符串并在图像上绘制,每次绘制后将图像保存为一个以数字命名的 PNG 文件。这样就可以得到一个递增的数字序列。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值