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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乔玉吉 中级黑马   /  2012-3-17 02:27  /  4410 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  jichu
{
        public static void main(String[] args)
        {
                int j = 0;
                System.out.println(j = j++);

                String a = "abc";
                String b = "abc";
                System.out.println("====>"+ a==b );

                System.out.println(get());


        }
        public static boolean get()
        {
                try
                {
                        return false;
                }
                finally
                {
                        return true;
                }
        }
}


输出结果是什么?测测你的基础

20 个回复

倒序浏览
本帖最后由 贠(yun)靖 于 2012-3-17 02:54 编辑

j=j++    是先赋值 在++  输出0
a b 指向同一个地址   但是“ ===> ”+a==b  是先运算“ ===> ”+a   结果为字符串  再和b的地址比较 返回false   如果“ ===> ”+(a==b)  的话是true
  第三个 finally一定执行了   所以是true
回复 使用道具 举报
第一个是 由于j++是先赋值过后再自身加1  所以j=0, 如果是j=++j;那么j就等于1,
第二个  问题就出在"====>"  这个字符串上面, 如果没有这个 那么他们都是指向同一个地址,但是最后a加上了这个对象 所以指向的地址就不一样了
第三个   很明显是会执行finally里面的  所以返回true
回复 使用道具 举报
j=j++,  j++ 是先运算后+1,当然,先把 j 赋值给 j ,之后 j 再+1,然后在输出,结果为:0;如果括号内是:j==j++,那么输出:ture。=是赋值,==是比较大小。
("====>"+ a==b):这是一个运算表达式当然输出运算的结果。,+运算优先级高于==,那么是将“====>”+ a 的结果,与b进行比较,明显是不相等的,结果是:false。
get();结果明显,异常处理后,最终结果为:true
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-17 02:50
j=j++    是先赋值 在++  输出0
a b 指向同一个地址   但是“ ===> ”+a==b  是先运算“ ===> ”+a   结果 ...

沙发描述的有个小错误,“ ===> ”+(a==b) ,是先运算括号内的,然后加号后面就是一个值true,是可以输出的,那么,运算结果应该是:===>true
回复 使用道具 举报
0
false
true
回复 使用道具 举报
0
true
true
吧··
回复 使用道具 举报
呀,第二个可能错了
回复 使用道具 举报
李中豪 黑马帝 2012-3-17 10:44:03
9#
0
false
true,
回复 使用道具 举报

            
1, System.out.println(j = j++);   j++自加  是用后 加1  就是输出后  j  的值加1,so ,输出j原来的值    0;
2,System.out.println("====>"+ a==b );  关键在"====>"+ a==b   ,  ""+a==b  先运行  比较运算符==左边的 ""+a  值为===>abc    在于==右边的变量b比较   结果肯定是false
3,  System.out.println(get());   调用 get()因为  finally是必须要执行的 ,所有输出为  true

0
false
true
回复 使用道具 举报
杨华威 发表于 2012-3-17 08:43
沙发描述的有个小错误,“ ===> ”+(a==b) ,是先运算括号内的,然后加号后面就是一个值true,是可以输出 ...

你都没看清楚我的分析  我的没错的
回复 使用道具 举报
0
false
true
回复 使用道具 举报
System.out.println(j = j++); 输出的结果是j的值。

String a = "abc";
String b = "abc";
System.out.println("====>"+ a==b );
String a="abc"  String b="abc" 虚拟机首先会在内部维护的string pool中通过string的equals方法查找是对象池中是否存放有该Stirng对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象。
而==是比较两个String对象的指向的内存地址是否相等;equals是比较两个String对象的值是否相等。故System.out.println("====>"+ a==b );的输出结果是false.

System.out.println(get());   无条件调用 get()函数 ,必执行finally输出true.

回复 使用道具 举报
贠(yun)靖 发表于 2012-3-17 14:59
你都没看清楚我的分析  我的没错的

你分析的没错,不过加括号的话输出确实是
====>true
带箭头的说
所以你还是说错了
回复 使用道具 举报
于紫洋 发表于 2012-3-17 17:47
你分析的没错,不过加括号的话输出确实是
====>true
带箭头的说

大哥 你看清楚啊  我说带箭头的是返回false  如果带括号的话是返回true
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-17 18:44
大哥 你看清楚啊  我说带箭头的是返回false  如果带括号的话是返回true

我们能理解你的意思

点评

RP?  发表于 2012-3-17 23:50
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-17 02:50
j=j++    是先赋值 在++  输出0
a b 指向同一个地址   但是“ ===> ”+a==b  是先运算“ ===> ”+a   结果 ...

不好意思啊!我看错了!:#
回复 使用道具 举报
o
flase
true
回复 使用道具 举报
贠(yun)靖 发表于 2012-3-17 02:50
j=j++    是先赋值 在++  输出0
a b 指向同一个地址   但是“ ===> ”+a==b  是先运算“ ===> ”+a   结果 ...

===> ”+a,请问兄台, 这个输出 的是===〉a吧。这 是在连接字符。后面的一系列是怎么来的,请详解。谢谢
回复 使用道具 举报
错误: 找不到或无法加载主类 Noname1。我怎么不能运行呢?可以编译。

点评

运行不了肯定是遇到传说中的RP问题了  发表于 2012-3-17 23:21
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马