1.三目运算符输出
A1:判断以下输出
Object obj1 = true ? new Integer(1) : new Double(2.0);
System.out.println(obj1);
输出:
解析:
Object obj1 = true ? new Integer(1) : new Double(2.0);
//这里是一个三元运算符,因为Integer和Double都是Object的子类,
// 但是呢,Integer在三元运算符中的前一位判断中,那么最后对象是建立的Integer对象,注意提高优先级
注意:
在做三元运算符的时候,要把整个三元运算符看作一个整体, 如果两个的精度不一致,会提高精度,无论输出是谁,但是精度必须是两者中最高的,
精度:double > float > long > int >char
2.基本数据类型和包装类
A01:判断下列语句有没有错
Double d = 2.0;
Float f = 1.5;
结果:
解析:
1、后面的数据皆为数据类型,第一句话,是将基本数据类型20给调用了valueOf()方法装箱了,相当于就是实例化成了一个Double对象,所以没问题
2、第二句话报错是因为,1.5被默认成是double类型的,double数据类型无法转换成float类型,所以也就也没有被自动装箱,所以也就不是一个Float对象
A02:判断以下语句的输出结果
public class StringExercise03 {
public static void main(String[] args) {
String a = "123";
String b = new String("123");
System.out.println(a.equals(b));
System.out.println(a == b);
System.out.println(a == b.intern());
System.out.println(b == b.intern());
}
}
输出:
解析:
public class StringExercise03 {
public static void main(String[] args) {
String a = "123";// a指向常量池的”123“
String b = new String("123");// b指向堆中对象
System.out.println(a.equals(b));//true,比较数值
System.out.println(a == b);//false,比较对象,两者的对象地址所指向不同
System.out.println(a == b.intern());//true,
// intern()方法:返回字符串对象的规范表示,简单来说就是一个一个对象调用了intern()方法,那么对象直接指向常量池
System.out.println(b == b.intern());//false,b是一个对象,b.intern是直接指向常量池
}
}
注意:
intern()方法API的解释:当调用intern方法时,如果池已经包含与equals(Object)方法确定的相当于此String对象的字符串,则返回来自常量池的字符串。 否则,此String对象将添加到常量池中,并返回对此String对象的引用。
通俗理解:只要String对象调用了 intern ( ) 方法,那么这个对象就是指向常量池的