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