黑马程序员技术交流社区

标题: 测测你的基础 [打印本页]

作者: 乔玉吉    时间: 2012-3-17 02:27
标题: 测测你的基础
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;
                }
        }
}


输出结果是什么?测测你的基础
作者: 贠(yun)靖    时间: 2012-3-17 02:50
本帖最后由 贠(yun)靖 于 2012-3-17 02:54 编辑

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

沙发描述的有个小错误,“ ===> ”+(a==b) ,是先运算括号内的,然后加号后面就是一个值true,是可以输出的,那么,运算结果应该是:===>true
作者: 程旦    时间: 2012-3-17 10:28
0
false
true
作者: 于紫洋    时间: 2012-3-17 10:35
0
true
true
吧··
作者: 于紫洋    时间: 2012-3-17 10:36
呀,第二个可能错了
作者: 李中豪    时间: 2012-3-17 10:44
0
false
true,
作者: 魏明明    时间: 2012-3-17 11:55

            
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
作者: 贠(yun)靖    时间: 2012-3-17 14:59
杨华威 发表于 2012-3-17 08:43
沙发描述的有个小错误,“ ===> ”+(a==b) ,是先运算括号内的,然后加号后面就是一个值true,是可以输出 ...

你都没看清楚我的分析  我的没错的
作者: 黑马肖凯骏    时间: 2012-3-17 16:06
0
false
true

作者: 张红    时间: 2012-3-17 17:42
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.


作者: 于紫洋    时间: 2012-3-17 17:47
贠(yun)靖 发表于 2012-3-17 14:59
你都没看清楚我的分析  我的没错的

你分析的没错,不过加括号的话输出确实是
====>true
带箭头的说
所以你还是说错了
作者: 贠(yun)靖    时间: 2012-3-17 18:44
于紫洋 发表于 2012-3-17 17:47
你分析的没错,不过加括号的话输出确实是
====>true
带箭头的说

大哥 你看清楚啊  我说带箭头的是返回false  如果带括号的话是返回true
作者: 于紫洋    时间: 2012-3-17 18:48
贠(yun)靖 发表于 2012-3-17 18:44
大哥 你看清楚啊  我说带箭头的是返回false  如果带括号的话是返回true

我们能理解你的意思
作者: 杨华威    时间: 2012-3-17 20:12
贠(yun)靖 发表于 2012-3-17 02:50
j=j++    是先赋值 在++  输出0
a b 指向同一个地址   但是“ ===> ”+a==b  是先运算“ ===> ”+a   结果 ...

不好意思啊!我看错了!:#
作者: 贾旭    时间: 2012-3-17 21:44
o
flase
true
作者: 刘_浩    时间: 2012-3-17 23:13
贠(yun)靖 发表于 2012-3-17 02:50
j=j++    是先赋值 在++  输出0
a b 指向同一个地址   但是“ ===> ”+a==b  是先运算“ ===> ”+a   结果 ...

===> ”+a,请问兄台, 这个输出 的是===〉a吧。这 是在连接字符。后面的一系列是怎么来的,请详解。谢谢
作者: 刘_浩    时间: 2012-3-17 23:19
错误: 找不到或无法加载主类 Noname1。我怎么不能运行呢?可以编译。
作者: 刘_浩    时间: 2012-3-17 23:50
不好意思看错了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2