java输出菱形*号代码解析_java每日一练(19_03_25)

名人名言

昨日翻译

It is never too late to mend.

亡羊补牢,为时不晚

今日名言

There is no man so bad,but he secretly respects the good.

2019.03.2问题及解析
public class IntegerTest {    public static void main(String[] args) {        Integer num1 = new Integer(1);        Integer num2 = num1;        changeNumber(num2);        System.out.println(num1.intValue());        System.out.println(num1 == num2);    }    private static void changeNumber(Integer integer){        integer = new Integer(2);    }}

请问上述程序的输出结果是什么?为什么?

答案与解析

代码流程

首先声明了Integer对象num1,并且像它的有参构造传递了参数1,之后声明了Integer读写num2,将num1赋值给num2,调用了changeNumber()方法,将num2作为参数传递。

changeNumber方法中将传递进来的参数重新实例化,并且给有参构造传递参数2。

打印num1的intValue()方法的返回值

打印num1 == num2的结果

问题关键

我们一起来用idea看看class文件反编译后的结果,就会发现很多东西都是骗人的。我们也要尽量避免类似的写法来减少自己误导自己的情况发生。

public class IntegerTest {    public IntegerTest() {    }    public static void main(String[] args) {        Integer num1 = new Integer(1);        changeNumber(num1);        System.out.println(num1);        System.out.println(num1 == num1);    }    private static void changeNumber(Integer integer) {        new Integer(2);    }}

因为num2和num1都是指向同一个地址,并且num2后续没做什么有用的操作,我们虚拟机编译的时候直接把num2整个的换成了num1了。

而changeNumber方法用方法内的局部变量来接收一个新的对象,之后不对它进行任何的操作,同样不会产生任何的效果,因此虚拟机同样对它进行了省略。

直接从反编译的结果来看我们这题的答案谁都能够轻松的得出结果

但是我们能够影响自己的代码却不能影响别人的,因此我们一方面要能够会看这类代码,意识到它的问题所在,另外一方面也要时刻注意尽量精简自己的代码,增加代码的可读性和实用性,这样让他人来看我们的代码的时候才能够明白我们想要表达的意思,提高写作效率。

2019.03.25问题 public class PrintTest {
public class PrintTest {    static int num1 = 1;    static int num2 = 2;    static String num3 = "3";    public static void main(String[] args) {        static int num4 = 4;        System.out.println(num4++);        System.out.println(num1 + num2 + num3 + num4);    }}

1.请问上述程序的输出结果是什么?

2.如果错误,如何修改使他正确,修改后的输出结果又是什么?

往期回顾

java每日一练(19_03_24)     (程序的输出结果)

java每日一练(19_03_23)     (程序的输出结果)

java每日一练(19_03_22)   (数据库)

java每日一练(19_03_21) (JDBC驱动包)

java每日一练(19_03_20)    (连接数据库)

java每日一练(19_03_19)      (代码能否执行)

java每日一练(19_03_18)  (showType(i)方法)

java每日一练(19_03_17)   (mysql安装)

java每日一练(19_03_16)   (springboot框架)

java每日一练(19_03_15)  (多线程问题)

java每日一练(19_03_14)  (程序的执行结果)

java每日一练(19_03_13)  (pom.xml文件)

java每日一练(19_03_12)  (输出结果)

java每日一练(19_03_11)  (程序的输出结果)

加入我们吧~

眼过千遍,不如手过一遍,一定一定要把自己的想法写出来(想法不论对错,写你所想就是进步),这样才会有所收获,你的每一个留言和分享小刀都会认真回复,彼此学习共同进步~

小刀和小伙伴在学习群里等你来一起监督学习哦,坚持!加油!进群请加小刀微信: best396975802

8598bcff41fa0cea881a60a63a996203.png

感谢所有在后台留言的小伙伴们,每一分的付出都会收到回报,你们都是最棒的哦!

4e7fc8ede3a0152e75a962fbc2e8ed28.gifEND 4e7fc8ede3a0152e75a962fbc2e8ed28.gif

微信群请点击公众号菜单进微信群

文字|天堂

排版|花音

1074a9baab97a36e13823e4624bc504e.png你点的每个 在看,我都认真当成了喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值