java 基础数据类型面试_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();

c.add(“123”);

c.add(“345”);

c.add(“456”);

boolean b = c.contains(123);

System.out.println(b);

问输出是什么,为什么?

false  数据类型不匹配

6  看程序写出运行结果:

1  List 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 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类也可以进行大数的操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值