• Java(数据类型)基础面试


    1     String s1 = "Java";

    String s2 = "Java";

    String s3 = "Ja" + "va";

    String ss1 = "Ja";

    String ss2 = "va";

    String s4 = ss1+ss2;

    System.out.println(s1==s2);

    System.out.println(s1==s3);

    System.out.println(s1==s4);

    求输出结果,并说明为什么?

    true   true    false

    原因:java中String对常亮具有缓存,并且对常量之间的“+”操作与常量等同。然变量之间的“+”操作是生成新的对象。

    2   double a = 0.0;

    int b = 0;

    double a1 = a/a,a2=a/a;

    System.out.println(a1==a2);

    System.out.println(6.2/a==129.3/a);

    System.out.println(-8/a);

    System.out.println(-8/b);

    输出是什么,为什么?

    false  a1=NaN  a2=NaN  0/0.0 = NaN  且NaN与NaN不相等

    true  6.2/a = Infinity=129.3/a (正数/0.0= Infinity)

    -Infinity (负数/0.0= -Infinity)

    java.lang.ArithmeticException: / by zero (0不能做除数)

    3     byte b = 5;

    (1)b = b + 5;

    (2)b += 5;

    (1)和(2)有什么区别?

    (1)报错,类型不一致

    (2)不报错,b=10

    4     Integer e = 100,f = 100;

    System.out.println(e==f);

    Integer g = 200,h = 200;

    System.out.println(g==h);

    Integer i = new Integer(100);

    Integer j = new Integer(100);

    System.out.println(i==j);

    System.out.println(i.equals (j));

    问输出结果,说明为什么。

    true

    false

    false  (内存比较)

    true (值比较)

    Integer 在(-128,127)范围内是,能够直接翻译为 Integer a = Integer.valueOf(i);  自动拆箱操作

    JDK中valueOf的源码如下:

    1 public static Integer valueOf(int i) {
    2         assert IntegerCache.high >= 127;
    3         if (i >= IntegerCache.low && i <= IntegerCache.high)
    4             return IntegerCache.cache[i + (-IntegerCache.low)];
    5         return new Integer(i);
    6     }

         因此两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false (缓存操作)

         int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比。

    5    Collection c = new ArrayList<String>();

    c.add(“123”);

    c.add(“345”);

    c.add(“456”);

    boolean b = c.contains(123);

    System.out.println(b);

    问输出是什么,为什么?

    false  数据类型不匹配 

    6  看程序写出运行结果:

           1  List<String> list = new ArrayList<>();

           2  list.add("a1");

           3  list.add("a2");

           4  list.add("a3");

           5  list.add("a4");

           6  list.add("a5");

           7  Iterator<String> it = list.iterator();

           8  while(it.hasNext()){

           9      String s = it.next();

           10    if(s.equals("a3")){

           11           list.add("ABC");

           12    }

           13    System.out.println(s);

           14  }

    输出结果是什么,为什么

    第1行  报错,应补齐泛型

    结果:

    a1

    a2

    Exception in thread "main" a3

    java.util.ConcurrentModificationException

       at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)

       at java.util.ArrayList$Itr.next(ArrayList.java:791)

       at light.mvc.controller.base.Demo.main(Demo.java:18)

    原因:list集合Iterator遍历的过程中,不能进行add、remove操作。

     

     

    7   System.out.println(0.09 + 0.01);

    System.out.println(1.0 - 0.32);

    System.out.println(1.015 * 100);

    System.out.println(1.301 / 100);

    结果为:

    0.09999999999999999

    0.6799999999999999

    101.49999999999999

    0.013009999999999999

    为什么,会造成什么后果,该怎么解决。

     对于不需要任何准确计算精度的数字可以直接使用float或double,但是如果需要精确计算的结果,则必须使用BigDecimal类,而且使用BigDecimal类也可以进行大数的操作。

     

     

  • 相关阅读:
    软件工程实践总结作业
    软工实践 产品个人分析
    软工交接情况
    结队第二次作业——WordCount进阶需求
    团队展示(团队)
    软工第一次结对
    软工实践第二次作业
    selenium_04_课堂笔记
    selenium_05_课堂笔记
    selenium_06_课堂笔记
  • 原文地址:https://www.cnblogs.com/doudingbest/p/7008064.html
Copyright © 2020-2023  润新知