记录工作中遇到的疑惑点
如有错解,请大家一定要帮我在评论中指正,一起进步,多谢了
- Boolean对象为null,在if中结果是什么?
// 附A
Boolean b = null ;
if (!b){
System.out.println("能打印出来吗?") ;
}
// 附B
Boolean b = null ;
if (b){
System.out.println("能打印出来吗?") ;
}
// 附C
boolean c = true ;
if(b && c){
System.out.println("这个能打印吗");
}
- 一个对象是null ,能强转为其它类型吗?
// 附A
Boolean b = (Boolean)null ;
String s = (String)null ;
Object o = (Object)null ;
- Integer对象比较用 == 可以吗?
// 附A
Integer a = 100 ;
Integer a1 = 100 ;
Integer b = 200 ;
Integer b1 = 200 ;
if (a == 100) {
System.out.println("会打印 a == 100 吗?");
}
if (a == a1) {
System.out.println("会打印 a == a1 吗?");
}
if (b == 200) {
System.out.println("会打印b == 200 吗?");
}
if (b == b1) {
System.out.println("会打印 b == b1 吗?");
}
- 字符串转Boolean对象,什么情况下是转成true ?
// 附A
Boolean aBoolean = Boolean.valueOf("");
Boolean a1 = Boolean.valueOf("1");
Boolean aqw2 = Boolean.valueOf("qw2!");
Boolean aTrue = Boolean.valueOf("true");
Boolean aTRUE = Boolean.valueOf("TRUE");
Boolean aFalse = Boolean.valueOf("false");
Boolean aFALSE = Boolean.valueOf("FALSE");
// 附B
boolean a2Boolean = Boolean.parseBoolean("");
boolean a21 = Boolean.parseBoolean("1");
boolean a2qw2 = Boolean.parseBoolean("qw2!");
boolean a2True = Boolean.parseBoolean("true");
boolean a2TRUE = Boolean.parseBoolean("TRUE");
boolean a2False = Boolean.parseBoolean("false");
boolean a2FALSE = Boolean.parseBoolean("FALSE");
- (+- a) 的结果是什么?
int a = 4 ;
int num1 = ( +- a - 1 ) / a ;
int num2 = ( + a - 1 ) / a ;
- 下列程序的输出结果
String s1 = “abc”;
String s2 = “a”;
String s3 = “bc”;
String s4 = s2 + s3;
System.out.println(s1 == s4);
- 下列程序的输出结果:
String s1 = “abc”;
final String s2 = “a”;
final String s3 = “bc”;
String s4 = s2 + s3;
System.out.println(s1 == s4);
答案:
- 上面的三个代码块都会出现空指向异常。
- null 可以强转成任意对象,但依旧是 null 。
- Integer 小于127都有缓存,所以小于127可以用 == 比较,大于127则要用equals才能比较,但最好统一使用equals !
- 只有 “true”和“TRUE” 可以转换成true ,其它的全部为false .
- 附源码:
public static boolean parseBoolean(String s) {
return ((s != null) && s.equalsIgnoreCase("true"));
}
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
public static Boolean valueOf(String s) {
return parseBoolean(s) ? TRUE : FALSE;
}
+a
等价于a
而+- a
等价于- a
, 说白了就是正负a。这是在开发中出现的小插曲,不小心把( a + b - 1) / b
中的a
给退格了。当时看到没有报错,居然没有反应过来false,因为s2+s3实际上是使用StringBuilder.append来完成,会生成不同的对象。
true,因为final变量在编译后会直接替换成对应的值,所以实际上等于s4=”a”+”bc”,而这种情况下,编译器会直接合并为s4=”abc”,所以最终s1==s4。