A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 Yov正 于 2015-5-28 22:38 编辑

心里素质不好的慎看啊,不过做出来你岂不是太吊了?
一、
public static void main(String[] args) {
                int a = 0;
                a = a++;
                System.out.println(a);
        }
二、
public static void main(String[] args) {
                String str = "apple";
                changeStr(str);
                System.out.println(str);
        }

        private static void changeStr(String str) {
                str = str+" phone";
        }-----------------------最新编辑
看到很多人说简单,也有很多人给出了解释,但有些人没有答到点上甚至打错了哦。
第一题我知道答案,硬让我解释我也能逻辑解释通,但是实际上这涉及到java的a++底层实现问题,如果没有了解过这方面的肯定是不会而只能蒙的,这也不是基础就能学到的知识。(只是我最近了解到的一个很新奇的知识点,by the way,c和java的结果不一样哦)
关于第二题确是我想跟大家分享的,这题每个java程序员都要会做,而且要知道为什么。其实是考的java调用方法时,传递的引用还是值,方法的参数是哪儿来的。str只是一个单纯的对象而已,不涉及到String的特性。类似的题看下面(tip:如果这一类题不懂为什么,那以后你写的任何代码都是可能出问题的哦,换言之你java没入门,所以不但要知道答案,还要知道为什么。画图可能有助于理解)
public static void main(String[] args) {
                Stu stu = new Stu();
                stu.name = "zhang";
                changeStr(stu);
                System.out.println(stu.name);//结果?
        }

        private static void changeStr(Stu stu) {
                stu.name = "li";
                stu = new Stu();
                stu.name = "wang";
        }

        public static class Stu {
                public String name = "zhao";
        }

59 个回复

正序浏览
雪域星辰 发表于 2015-5-28 23:14
这个东西很是细节啊。。。

第二题要好好掌握啊
回复 使用道具 举报
这个东西很是细节啊。。。
回复 使用道具 举报
你在干什么
回复 使用道具 举报
我发现大婶好多啊   作为渣渣的我表示我都看不懂这两个题目
回复 使用道具 举报
同学们查看最新结果啦。
回复 使用道具 举报
ZYZQ 中级黑马 2015-5-28 21:54:36
52#
Your water too well, I'm out!!
回复 使用道具 举报
xxz 发表于 2015-5-27 20:51
第一个是0 耶。

恩恩,知道了,谢谢
回复 使用道具 举报
谢谢分享,长知识了
回复 使用道具 举报
结果是0,apple
回复 使用道具 举报
妥妥水贴。呵呵
回复 使用道具 举报
真够水的
回复 使用道具 举报
学习了:victory:
回复 使用道具 举报
这也有问题?估计是标题党哎~真心给跪了!
回复 使用道具 举报
一、答案是:0
二、答案是:apple
回复 使用道具 举报
对楼主无语了。。。。。,楼主好好练练基础吧,
回复 使用道具 举报
niuapp 来自手机 中级黑马 2015-5-28 08:33:29
42#
曲终烟尽 发表于 2015-5-27 22:06
看这么多人都说简单,但我觉得这个问题第一题还是需要深入了解,
只是直到它的结果是0,但为什么是0呢,
a= ...

我感觉还是有点晕,a++如果是临时的,那是被左边的 a覆盖了?为什么C里边输出的是 1呢,纠结
回复 使用道具 举报
有点简单吧,,,
回复 使用道具 举报
我以为有多难哦,都是考过的题目
回复 使用道具 举报
答案是:0,apple
回复 使用道具 举报
看这么多人都说简单,但我觉得这个问题第一题还是需要深入了解,
只是直到它的结果是0,但为什么是0呢,
a=a++;
等号右侧先做运算,
而右侧a++的值是0,后加这个动作应该是当前语句的末了才执行。也就是整个语句最后执行。如果我这么说没错,那就是
a=a;a++;  这两句是等于  a=a++;的
一开始a=a 得到 a==0,之后对a进行加1操作,a++,那么问题来了,这时候a为什么输出是0,而不是1呢???
看上去我说的似乎是没错的啊,我也觉得我说的没错啊!那你们说说为什么不等于1而是等于0,你们上边都说很基础,那解释一下,谁能理解其中的真正原理呢!
我当时看到你这个题我就很纳闷,我百度了,之后觉得这个问题有点深奥不是目前学基础知识后能理解的,这个和编译器和虚拟机有关,说白了,要看汇编的代码执行过程才能理解其中的原因。我是潦草看了一下,没有深究,但是知道个大概。
其中a++这句话在内存中新建了一个临时变量a,所以对a的操作就不会对原来的变量a产生影响,最后输出的是原来的a的结果0,而不是变成1的另一个a。!!!
回复 使用道具 举报 1 0
123下一页
您需要登录后才可以回帖 登录 | 加入黑马