几道小小的题目一起和大家更进一步的了解 Java (Ⅱ)

时间:2021-03-17 09:44:51
这是小小题目的系列之二
系列之一:http://community.csdn.net/Expert/TopicView3.asp?id=5731833

做题规则:不允许进行上机操作,但可以查 API DOC,JDK 版本 1.5。

1. 请问以下程序会输出什么?

  public class Test1 {
    public static void main(String[] args) {
      int num = 32;
      System.out.println(num >>= 32);
    }
  }

======= 我 == 是 == 题 == 目 == 间 == 的 == 小 == 分 == 隔 == 符 =======

2. 请问以下程序会输出什么?

  public class Test2 {
    public static void main(String[] args) {
      int j = 0;
      for (int i = 0; i < 100; i++) {
        j = j++;
      }
      System.out.println(j);
    }
  }
  
======= 我 == 是 == 题 == 目 == 间 == 的 == 小 == 分 == 隔 == 符 =======

3. 请问以下程序会输出什么?

  public class Test3 {
    public static void main(String[] args) {
      boolean b = true?false:true == true?false:true;
      System.out.println(b);
    }
  }

======= 我 == 是 == 题 == 目 == 间 == 的 == 小 == 分 == 隔 == 符 =======

4. 请问以下程序会输出什么?

  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;

  public class Test4 {
    public static void main(String[] args) {
      List<String> list = new ArrayList<String>();
      list.add("Happy");
      list.add("birthday");
      list.add("to");
      list.add("you.");    
      for(Iterator i = list.iterator(); i.hasNext(); ) {
        String s = i.next();
        System.out.println(s);
      }
    }
  }

======= 我 == 是 == 题 == 目 == 间 == 的 == 小 == 分 == 隔 == 符 =======

5. Queue(队列)接口是 JDK 1.5 中新增加的类库,为了让大家更好地了解它,请说出以下程序的运行结果。

  import java.util.Comparator;
  import java.util.PriorityQueue;
  import java.util.Queue;

  public class Test5 {
    public static void main(String[] args) {
      Queue<Integer> queue = new PriorityQueue<Integer>(20, 
          new Comparator<Integer>() {
            public int compare(Integer i, Integer j) {
              int result = i % 2 - j % 2;
              if (result == 0)
                result = i - j;
              return result;
            }
        });

      for (int i = 0; i < 20; i++) {
        queue.offer(i);
      }

      for (int i = 0; i < 20; i++) {
        System.out.println(queue.poll());
      }
    }
  }

======= 我 == 是 == 题 == 目 == 间 == 的 == 小 == 分 == 隔 == 符 =======

6. 请在以下程序段中的空白处补上最简洁的语句,在程序运行后会输出运行时的时间。

  显示格式为:yyyy-MM-dd HH:mm:ss

  public class Test6 {
    public static void main(String[] args) {
      System.out.println(formatTime(System.currentTimeMillis()));
    }
    
    public static String formatTime(long time) {
      return _____________________________;
    }
  }

老规矩,需要粘帖代码运行的话,请将两个全身空格替换成一个 Tab 或者直接替换掉即可。

116 个解决方案

#1


第一题不会。第二道是99

#2


第三道是 flase

#3


jf

#4


1.32
2.99
3.true
4.b h t y
其他的不会.

#5


第二题是0,奇怪!

#6


第3题,false

#7


学习学习

#8


第三道题好象是一个下拉列表的只知道着些。希望楼主解释一下。谢了

#9


有意思,研究下。

#10


先占个位置,再慢慢研究

#11


BC

#12


to: letsflytogether

“BC”应该不会是“白痴”的意思吧。

#13


2题:100
3题:false
本来我准备把这个答案贴上去的,发现2题和上面说的99不一样,我就运行了一下,傻眼了,居然是0.想了想,顿然醒悟,j=j++;每次j++是0,随后变为1,随后又把0赋值给j,j又成了0.真是妙啊

#14


新的还没学会.旧的就忘的差不多了.哎!真应该恶补一下.

#15


没运行,推测一下结果
1 0 右移32位
2 0 java入栈和C有点不一样,入栈后值就不变了,相当于j=j,j++(右->左),j=j结果还是0
3 false
4 Happy
  birthday
  to 
  you. ArrayList顺序好像不会乱
5 19
  17
  ...
  1
  20
  18
  ...
  0 优先级别

6 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time));

#16


第一道题很奇怪:
   解释下:移位操作是相对于内存的,而NUM是INT型,也就是32位,(前面27个0)10000
   当移位少于32位(全长时),只需要将整个内存单元往左或往右移动指定数目
       如:num >>2  ------8     num >> 3   ------4
   当移位大于32位(全长时),这时存储该数的内存单元发生了变化,会将整个数字单元移到别的内存单元中,这时取到的值会是另外内存单元的值.
       如:num  >> 32  (恰好移到另一个单元)-----32
          num  >> 33  (和num>>1结果是一样的)----16 
说的不对,有问题的地方还请高手们指教哈!!!!

#17


1.  32
2.  0
3.  false
4.  String s = i.next();要強轉
5.  先偶數排序,然后奇數排序
6.  new Date(time).toLocaleString().replace("/", "-")

#18


楼主辛苦了~

1. int移位,低5位有效,所以压根没移位
2. 看看这里
   http://community.csdn.net/Expert/topic/5759/5759250.xml?temp=.3821833
6. 楼主太善良了~格式都写好了~

#19


mk

#20


第 6 题是想让大家补上最简洁的语句,不过上面回答的代码不是很简洁。提示一下:JDK 1.5 中有些什么新的东西呢?

#21


boring...

#22


第一道题很奇怪:
   解释下:移位操作是相对于内存的,而NUM是INT型,也就是32位,(前面27个0)10000
   当移位少于32位(全长时),只需要将整个内存单元往左或往右移动指定数目
       如:num >>2  ------8     num >> 3   ------4
   当移位大于32位(全长时),这时存储该数的内存单元发生了变化,会将整个数字单元移到别的内存单元中,这时取到的值会是另外内存单元的值.
       如:num  >> 32  (恰好移到另一个单元)-----32
          num  >> 33  (和num>>1结果是一样的)----16 
说的不对,有问题的地方还请高手们指教哈!!!!

----应该是
    解释下:移位操作是相对于内存的,而NUM是INT型,也就是32位,(前面26个0)100000

#23


6 难道是用String.format,如果要我选择查相应的格式,我宁愿选择熟悉的SimpleDateFormat
return String.format("%tF %tT", new Date(time), new Date(time));

#24


to: qybao

哈哈,String.format 要比 SimpleDateFormat 快很多,不过你的写法还是不简洁。

#25


喜欢这样的学习方式,帮顶~!

#26


mk

#27


第二道题是0
因为JAVA用了中间缓存变量的机制
j=j++;可换成如下写法。
temp=j;
j=j+1;
j=temp;
所以结果为0

#28


再简洁的话可以用%tx
我机器上没有JVM,试不了

#29


jf

#30


都是些菜鸟

#31


昏咯,這樣也行啊。。

#32


运行下

#33


:)

#34


mk

#35


jf,题目不错

#36


to: qybao(阿宝)

String.format() 的参数可以只带一个,用不着写两个 new Date(time) 吧,还有作为日期类型的话,可以直接使用 long 型数据的。

直接写成:

String.format("%tF %<tT", time);

就可以了,这种格式只在 JDK 1.5 以上的版本适用,作为格式化日期,完全可以取代 SimpleDateFormat,速度要比 SimpleDateFormat 快(当然了,将字符串变为 Date 就不行了)。从这个版本开始,喜欢 C 语言中的 printf 函数的,在 Java 里也可以使用 System.out.printf() 了,这主要依赖于 JDK 1.5 新增的特性——变参。具体的参数可以参见 java.util.Formatter 类。

#37


呵呵,看来楼主对这些细节抓的很细,看的啥书啊,看来我也要去把基础复习一下了

#38


第3题 
false
true==fale 结果是 FALSE

#39


对吗

#40


Server Error in '/' Application.
--------------------------------------------------------------------------------

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
=====================================================
加入我的收藏夹时出现了这段话。
那个打印boolean值b的应该是false吧。我记得三目是右结合的。

#41


mark!

#42


3. boolean b = true?false:true == true?false:true;
==>boolean b = true?false:(true == true?false:true);
当时自己写程序的时候,也这样写过,但是理解成
boolean b = (true?false:true == true)?false:true;
这样了,晕了好一阵子.后来就加括号了,好理解.

#43


哈哈,第 3 题,是让大家知道运算符的优先级别

boolean b = true?false:true == true?false:true;

== 的优先级要高于三目运算符的优先级,所以正确的运算顺序(加上括号来说明)是:

boolean b = ((true?false:(true == true))?false:true);

这样的,所以得出的结果是 false。如果你得出的答案是 true 的话,那你可能理解成了:

boolean b = (true?false:true) == (true?false:true);

没有把运算符的优先级别弄清楚,基本上的顺序是(1级优先级最高,16级最小):

1级 —— . ()
2级 —— ++ -- ! instanceof
3级 —— new
4级 —— * / %
5级 —— + -
6级 —— >> << >>>
7级 —— > < >= <=
8级 —— == !=
9级 —— &
10级 —— ^
11级 —— !
12级 —— &&
13级 —— ||
14级 —— ?:
15级 —— = += -= *= /= %= ^=
16级 —— &= <<= >>= >>>=

#44


mark

#45


bao兄弟啊,你自己也被转晕了,哈哈.

#46


太偏了,如果项目中有这样的代码存在会被认为可读性差

#47


很有意思的题目.

#48


受益匪浅,基础为王。

#49


第2题简单,结果都是0。呵呵,上学的时候研究了一下j++和++j的区别,一个是先操作再+,一个是先+再赋值

#50


进来学习一下

#1


第一题不会。第二道是99

#2


第三道是 flase

#3


jf

#4


1.32
2.99
3.true
4.b h t y
其他的不会.

#5


第二题是0,奇怪!

#6


第3题,false

#7


学习学习

#8


第三道题好象是一个下拉列表的只知道着些。希望楼主解释一下。谢了

#9


有意思,研究下。

#10


先占个位置,再慢慢研究

#11


BC

#12


to: letsflytogether

“BC”应该不会是“白痴”的意思吧。

#13


2题:100
3题:false
本来我准备把这个答案贴上去的,发现2题和上面说的99不一样,我就运行了一下,傻眼了,居然是0.想了想,顿然醒悟,j=j++;每次j++是0,随后变为1,随后又把0赋值给j,j又成了0.真是妙啊

#14


新的还没学会.旧的就忘的差不多了.哎!真应该恶补一下.

#15


没运行,推测一下结果
1 0 右移32位
2 0 java入栈和C有点不一样,入栈后值就不变了,相当于j=j,j++(右->左),j=j结果还是0
3 false
4 Happy
  birthday
  to 
  you. ArrayList顺序好像不会乱
5 19
  17
  ...
  1
  20
  18
  ...
  0 优先级别

6 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time));

#16


第一道题很奇怪:
   解释下:移位操作是相对于内存的,而NUM是INT型,也就是32位,(前面27个0)10000
   当移位少于32位(全长时),只需要将整个内存单元往左或往右移动指定数目
       如:num >>2  ------8     num >> 3   ------4
   当移位大于32位(全长时),这时存储该数的内存单元发生了变化,会将整个数字单元移到别的内存单元中,这时取到的值会是另外内存单元的值.
       如:num  >> 32  (恰好移到另一个单元)-----32
          num  >> 33  (和num>>1结果是一样的)----16 
说的不对,有问题的地方还请高手们指教哈!!!!

#17


1.  32
2.  0
3.  false
4.  String s = i.next();要強轉
5.  先偶數排序,然后奇數排序
6.  new Date(time).toLocaleString().replace("/", "-")

#18


楼主辛苦了~

1. int移位,低5位有效,所以压根没移位
2. 看看这里
   http://community.csdn.net/Expert/topic/5759/5759250.xml?temp=.3821833
6. 楼主太善良了~格式都写好了~

#19


mk

#20


第 6 题是想让大家补上最简洁的语句,不过上面回答的代码不是很简洁。提示一下:JDK 1.5 中有些什么新的东西呢?

#21


boring...

#22


第一道题很奇怪:
   解释下:移位操作是相对于内存的,而NUM是INT型,也就是32位,(前面27个0)10000
   当移位少于32位(全长时),只需要将整个内存单元往左或往右移动指定数目
       如:num >>2  ------8     num >> 3   ------4
   当移位大于32位(全长时),这时存储该数的内存单元发生了变化,会将整个数字单元移到别的内存单元中,这时取到的值会是另外内存单元的值.
       如:num  >> 32  (恰好移到另一个单元)-----32
          num  >> 33  (和num>>1结果是一样的)----16 
说的不对,有问题的地方还请高手们指教哈!!!!

----应该是
    解释下:移位操作是相对于内存的,而NUM是INT型,也就是32位,(前面26个0)100000

#23


6 难道是用String.format,如果要我选择查相应的格式,我宁愿选择熟悉的SimpleDateFormat
return String.format("%tF %tT", new Date(time), new Date(time));

#24


to: qybao

哈哈,String.format 要比 SimpleDateFormat 快很多,不过你的写法还是不简洁。

#25


喜欢这样的学习方式,帮顶~!

#26


mk

#27


第二道题是0
因为JAVA用了中间缓存变量的机制
j=j++;可换成如下写法。
temp=j;
j=j+1;
j=temp;
所以结果为0

#28


再简洁的话可以用%tx
我机器上没有JVM,试不了

#29


jf

#30


都是些菜鸟

#31


昏咯,這樣也行啊。。

#32


运行下

#33


:)

#34


mk

#35


jf,题目不错

#36


to: qybao(阿宝)

String.format() 的参数可以只带一个,用不着写两个 new Date(time) 吧,还有作为日期类型的话,可以直接使用 long 型数据的。

直接写成:

String.format("%tF %<tT", time);

就可以了,这种格式只在 JDK 1.5 以上的版本适用,作为格式化日期,完全可以取代 SimpleDateFormat,速度要比 SimpleDateFormat 快(当然了,将字符串变为 Date 就不行了)。从这个版本开始,喜欢 C 语言中的 printf 函数的,在 Java 里也可以使用 System.out.printf() 了,这主要依赖于 JDK 1.5 新增的特性——变参。具体的参数可以参见 java.util.Formatter 类。

#37


呵呵,看来楼主对这些细节抓的很细,看的啥书啊,看来我也要去把基础复习一下了

#38


第3题 
false
true==fale 结果是 FALSE

#39


对吗

#40


Server Error in '/' Application.
--------------------------------------------------------------------------------

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
=====================================================
加入我的收藏夹时出现了这段话。
那个打印boolean值b的应该是false吧。我记得三目是右结合的。

#41


mark!

#42


3. boolean b = true?false:true == true?false:true;
==>boolean b = true?false:(true == true?false:true);
当时自己写程序的时候,也这样写过,但是理解成
boolean b = (true?false:true == true)?false:true;
这样了,晕了好一阵子.后来就加括号了,好理解.

#43


哈哈,第 3 题,是让大家知道运算符的优先级别

boolean b = true?false:true == true?false:true;

== 的优先级要高于三目运算符的优先级,所以正确的运算顺序(加上括号来说明)是:

boolean b = ((true?false:(true == true))?false:true);

这样的,所以得出的结果是 false。如果你得出的答案是 true 的话,那你可能理解成了:

boolean b = (true?false:true) == (true?false:true);

没有把运算符的优先级别弄清楚,基本上的顺序是(1级优先级最高,16级最小):

1级 —— . ()
2级 —— ++ -- ! instanceof
3级 —— new
4级 —— * / %
5级 —— + -
6级 —— >> << >>>
7级 —— > < >= <=
8级 —— == !=
9级 —— &
10级 —— ^
11级 —— !
12级 —— &&
13级 —— ||
14级 —— ?:
15级 —— = += -= *= /= %= ^=
16级 —— &= <<= >>= >>>=

#44


mark

#45


bao兄弟啊,你自己也被转晕了,哈哈.

#46


太偏了,如果项目中有这样的代码存在会被认为可读性差

#47


很有意思的题目.

#48


受益匪浅,基础为王。

#49


第2题简单,结果都是0。呵呵,上学的时候研究了一下j++和++j的区别,一个是先操作再+,一个是先+再赋值

#50


进来学习一下