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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 983859111 于 2016-2-2 17:08 编辑

看到的一段超级奇葩的代码:
上边是源代码,下边是执行结果。。。。

  1. public class Test{
  2.         public static final int INT=4;
  3.         public static void main(String[] args){
  4.                 System.out.print("#1.");
  5.                 http://88250.b3log.org/weird-java-snippets
  6.                 System.out.println("Just OK");
  7.                
  8.                 System.out.print("#2.");
  9.                 int i=(byte)+(char)+(int)+(long)+(float)+(double)+1;
  10.                 i=-+-+1;
  11.                 System.out.println(i);
  12.                
  13.                 System.out.print("#3.");
  14.                 final Test test=new Test();
  15.                 System.out.println(test.getInt().INT);
  16.                
  17.                 System.out.print("#4.");
  18.                 System.out.println(getInts()[2]);
  19.         }
  20.         
  21.         public static Test getInt(){
  22.                 return null;
  23.         }
  24.         
  25.         public static int getInts()[]{
  26.                 return new int[]{1,2,3};
  27.         }
  28.         
  29. }
复制代码


然后感觉,整个小心脏都不好了。。。。看完之后完全懵逼了。。。
求大牛给讲解。。。

7 个回复

倒序浏览
代码在这里:

  1. public class Test{
  2.         public static final int INT=4;
  3.         public static void main(String[] args){
  4.                 System.out.print("#1.");
  5.                 http://88250.b3log.org/weird-java-snippets
  6.                 System.out.println("Just OK");
  7.                
  8.                 System.out.print("#2.");
  9.                 int i=(byte)+(char)+(int)+(long)+(float)+(double)+1;
  10.                 i=-+-+1;
  11.                 System.out.println(i);
  12.                
  13.                 System.out.print("#3.");
  14.                 final Test test=new Test();
  15.                 System.out.println(test.getInt().INT);
  16.                
  17.                 System.out.print("#4.");
  18.                 System.out.println(getInts()[2]);
  19.         }
  20.        
  21.         public static Test getInt(){
  22.                 return null;
  23.         }
  24.        
  25.         public static int getInts()[]{
  26.                 return new int[]{1,2,3};
  27.         }
  28.        
  29. }
复制代码


回复 使用道具 举报
这个是运行后输出结果。。。。

这段代码太魔障了。。。。
回复 使用道具 举报
前三个真不懂,第四个就是一个数组呀……
回复 使用道具 举报
983859111 来自手机 中级黑马 2016-2-2 21:09:56
报纸
Kindom 发表于 2016-2-2 18:28
前三个真不懂,第四个就是一个数组呀……

没人懂么?
回复 使用道具 举报
。。。。还没有大神来回复我。。。
回复 使用道具 举报
第一个输出:
中间的http:是一个标号,不影响运行,也不会输出,后面的//88250.b3log.org/weird-java-snippets是注释掉的内容,也不影响输出。
第二个输出:
int i=(byte)+(char)+(int)+(long)+(float)+(double)+1;
这一行起作用的也就是声明了一个变量i
i=-+-+1;
这个才影响最后的输出结果,
i = -+-+1;就是将1取正然后取负再取正再取负,实际之后符号影响结果,然而负负得正,也就是全为正,i最后结果为正1,
int i=(byte)+(char)+(int)+(long)+(float)+(double)+1;
最后是一个正1,而不是加1,对一个正1强转成double类型然后再取正再强转为float类型,再取正,再强转为long类型。。。最后强转为byte类型,然后又自动类型提升为int类型,赋值给了一个int类型的变量。
第三个输出:
声明一个final引用,test引用指向的对象不可以改变,
test引用指向一个Test对象,该对象又指向一个静态的方法getInt,该方法返回一个Test类型的对象,
也就是test.getInt()最终结果是一个Test对象,也就是一个Test对象调用了INT常量,常量值为4,
输出4。
第四个输出:
int getInts()[]{}是返回类型为int数组,也可以写成int[] getInts(){},
getInts()方法返回一个int数组,数组内容为1, 2, 3,,返回的那个数组我们假设为arr,
也就是getInts()[2]-->arr[2],数组中索引为2的元素值是3。

/*
自己的一些看法,跟大家讨论一下。
*/

评分

参与人数 1技术分 +1 收起 理由
洋葱头头 + 1

查看全部评分

回复 使用道具 举报
Marvin1993 发表于 2016-2-4 11:23
第一个输出:
中间的http:是一个标号,不影响运行,也不会输出,后面的//88250.b3log.org/weird-java-snipp ...

太赞了。。。讲的太明白了。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马