Java中基础类型的包装类在拆箱和装箱过程中起到了什么用处
副问题[/!--empirenews.page--]
下面通过一个简朴的示例才重现一下非常呈现的场景。 public class BoxTest {
public static void main(String[] args) { Map<String,Object> result = httpRequest(); long userId = (Long) result.get("userId"); }
// 模仿一个HTTP哀求 private static Map<String,Object> httpRequest(){ Map<String,Object> map = new HashMap<>(); map.put("userId",null); return map; } } 根基的场景就是哀求一个接口,去接口中取某个值,这个值为Long范例,从Map中取得值之后,举办Long范例的强转。当接口返回的userId为null时,强转这块就抛出空指针非常: Exception in thread "main" java.lang.NullPointerException at com.choupangxia.box.BoxTest.main(BoxTest.java:15) 上面的场景跟下面的代码呈现非常结果一样: public class BoxTest {
public static long getValue(long value) { return value; }
public static void main(String[] args) { Long value = null; getValue(value); } } 上述代码也是将Long范例进拆箱导致的非常,只不外一个在代码中,一个在参数中。为了说明更简化,我们以第二个为例举办讲授。 缘故起因说明 最初各人也许会迷惑,抛出非常的代码都没有工具的要领挪用,怎么会呈现空指针呢? 这中间首要涉及到的就是一个自动拆箱操纵。是否是拆箱导致的呢?我们来通过字节码看一下。 通过javap -c来查察一下对应的字节码: public class com.choupangxia.box.BoxTest { public com.choupangxia.box.BoxTest(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return
public static long getValue(long); Code: 0: lload_0 1: lreturn
public static void main(java.lang.String[]); Code: 0: aconst_null 1: astore_1 2: aload_1 3: invokevirtual #2 // Method java/lang/Long.longValue:()J (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |