奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

Java裝箱與拆箱詳解(附實例代碼)

時間:2025-02-11 12:51:19 java語言 我要投稿
  • 相關推薦

Java裝箱與拆箱詳解(附實例代碼)

  本文是百分網小編搜索整理的主要介紹Java 裝箱與拆箱詳解及實例代碼的相關資料,對java 的裝箱及拆箱進行了基本概念詳解及簡單使用,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!

  前言:

  要理解裝箱和拆箱的概念,就要理解Java數據類型

  裝箱:把基本類型用它們相應的引用類型包裝起來,使其具有對象的性質。int包裝成Integer、float包裝成Float

  拆箱:和裝箱相反,將引用類型的對象簡化成值類型的數據

  Integer a = 100;         這是自動裝箱 (編譯器調用的是static Integer valueOf(int i))

  int   b = new Integer(100); 這是自動拆箱

  看下面一段代碼

  m1

  public class DataType {

  public static void main(String args[]) {

  DataType dt = new DataType();

  dt.m11();

  dt.m12();

  }

  public void m11() {

  Integer a = new Integer(100);

  Integer b = 100;

  System.out.println("m11 result " + (a == b));

  }

  public void m12() {

  Integer a = new Integer(128);

  Integer b = 128;

  System.out.println("m12 result " + (a == b));

  }

  }

  打印結果是什么?

  m11 result false

  m12 result false

  “==”比較的是地址,而a和b兩個對象的地址不同,即是兩個對象,所以都是false

  通過javap解析字節碼,內容如下

  public void m11();

  Code:

  0:  new   #44; //class java/lang/Integer

  3:  dup

  4:  bipush 100

  6:  invokespecial  #46; //Method java/lang/Integer."<init>":(I)V

  9:  astore_1

  10: bipush 100

  12: invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  15: astore_2

  16: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  19: new   #59; //class java/lang/StringBuilder

  22: dup

  23: ldc   #61; //String m11 result

  25: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  28: aload_1

  29: aload_2

  30: if_acmpne    37

  33: iconst_1

  34: goto  38

  37: iconst_0

  38: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  41: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  44: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  47: return

  public void m12();

  Code:

  0:  new   #44; //class java/lang/Integer

  3:  dup

  4:  sipush 128

  7:  invokespecial  #46; //Method java/lang/Integer."<init>":(I)V

  10: astore_1

  11: sipush 128

  14: invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  17: astore_2

  18: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  21: new   #59; //class java/lang/StringBuilder

  24: dup

  25: ldc   #82; //String m12 result

  27: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  30: aload_1

  31: aload_2

  32: if_acmpne    39

  35: iconst_1

  36: goto  40

  39: iconst_0

  40: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  43: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  46: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  49: return

  </init></init></init></init>

  m2

  public class DataType {

  public static void main(String args[]) {

  DataType dt = new DataType();

  dt.m21();

  dt.m22();

  }

  public void m21() {

  Integer a = new Integer(100);

  Integer b = new Integer(100);

  System.out.println("m21 result " + (a == b));

  }

  public void m22() {

  Integer a = new Integer(128);

  Integer b = new Integer(128);

  System.out.println("m22 result " + (a == b));

  }

  }

  打印結果是

  m21 result false

  m22 result false

  a和b仍是兩個對象

  javap解析內容

  public void m21();

  Code:

  0:  new   #44; //class java/lang/Integer

  3:  dup

  4:  bipush 100

  6:  invokespecial  #46; //Method java/lang/Integer."<init>":(I)V

  9:  astore_1

  10: new   #44; //class java/lang/Integer

  13: dup

  14: bipush 100

  16: invokespecial  #46; //Method java/lang/Integer."<init>":(I)V

  19: astore_2

  20: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  23: new   #59; //class java/lang/StringBuilder

  26: dup

  27: ldc   #84; //String m21 result

  29: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  32: aload_1

  33: aload_2

  34: if_acmpne    41

  37: iconst_1

  38: goto  42

  41: iconst_0

  42: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  45: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  48: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  51: return

  public void m22();

  Code:

  0:  new   #44; //class java/lang/Integer

  3:  dup

  4:  sipush 128

  7:  invokespecial  #46; //Method java/lang/Integer."<init>":(I)V

  10: astore_1

  11: new   #44; //class java/lang/Integer

  14: dup

  15: sipush 128

  18: invokespecial  #46; //Method java/lang/Integer."<init>":(I)V

  21: astore_2

  22: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  25: new   #59; //class java/lang/StringBuilder

  28: dup

  29: ldc   #86; //String m22 result

  31: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  34: aload_1

  35: aload_2

  36: if_acmpne    43

  39: iconst_1

  40: goto  44

  43: iconst_0

  44: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  47: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  50: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  53: return

  m3

  public class DataType {

  public static void main(String args[]) {

  DataType dt = new DataType();

  dt.m31();

  dt.m32();

  }

  public void m31() {

  Integer a = 100;

  Integer b = 100;

  System.out.println("m31 result " + (a == b));

  }

  public void m32() {

  Integer a = 128;

  Integer b = 128;

  System.out.println("m32 result " + (a == b));

  }

  }

  打印結果

  m31 result true

  m32 result false

  為什么有第一個是true,第二個是false呢?觀察javap解析的數據

  javap解析內容

  public void m31();

  Code:

  0:  bipush 100

  2:  invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  5:  astore_1

  6:  bipush 100

  8:  invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  11: astore_2

  12: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  15: new   #59; //class java/lang/StringBuilder

  18: dup

  19: ldc   #88; //String m31 result

  21: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  24: aload_1

  25: aload_2

  26: if_acmpne    33

  29: iconst_1

  30: goto  34

  33: iconst_0

  34: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  37: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  40: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  43: return

  public void m32();

  Code:

  0:  sipush 128

  3:  invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  6:  astore_1

  7:  sipush 128

  10: invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  13: astore_2

  14: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  17: new   #59; //class java/lang/StringBuilder

  20: dup

  21: ldc   #90; //String m32 result

  23: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  26: aload_1

  27: aload_2

  28: if_acmpne    35

  31: iconst_1

  32: goto  36

  35: iconst_0

  36: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  39: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  42: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  45: return

  m4

  public class DataType {

  public static void main(String args[]) {

  DataType dt = new DataType();

  dt.m41();

  dt.m42();

  }

  public void m41() {

  Integer a = Integer.valueOf(100);

  Integer b = 100;

  System.out.println("m41 result " + (a == b));

  }

  public void m42() {

  Integer a = Integer.valueOf(128);

  Integer b = 128;

  System.out.println("m42 result " + (a == b));

  }

  }

  打印結果

  m41 result true

  m42 result false

  javap解析內容

  public void m41();

  Code:

  0:  bipush 100

  2:  invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  5:  astore_1

  6:  bipush 100

  8:  invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  11: astore_2

  12: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  15: new   #59; //class java/lang/StringBuilder

  18: dup

  19: ldc   #92; //String m41 result

  21: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  24: aload_1

  25: aload_2

  26: if_acmpne    33

  29: iconst_1

  30: goto  34

  33: iconst_0

  34: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  37: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  40: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  43: return

  public void m42();

  Code:

  0:  sipush 128

  3:  invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  6:  astore_1

  7:  sipush 128

  10: invokestatic  #49; //Method java/lang/Integer.valueOf:(I)Ljava/lang/In

  teger;

  13: astore_2

  14: getstatic    #53; //Field java/lang/System.out:Ljava/io/PrintStream;

  17: new   #59; //class java/lang/StringBuilder

  20: dup

  21: ldc   #94; //String m42 result

  23: invokespecial  #63; //Method java/lang/StringBuilder."<init>":(Ljava/la

  ng/String;)V

  26: aload_1

  27: aload_2

  28: if_acmpne    35

  31: iconst_1

  32: goto  36

  35: iconst_0

  36: invokevirtual  #66; //Method java/lang/StringBuilder.append:(Z)Ljava/la

  ng/StringBuilder;

  39: invokevirtual  #70; //Method java/lang/StringBuilder.toString:()Ljava/l

  ang/String;

  42: invokevirtual  #74; //Method java/io/PrintStream.println:(Ljava/lang/St

  ring;)V

  45: return

  }

  分析

  javap是Java自帶的一個工具,可以反編譯,也可以查看Java編譯器生成的字節碼(上面代碼只使用了javap -c DataType),是分析代碼的一個好工具,具體怎么使用請Google一下

  先看一下m4,為什么運行結果中出現了“true”呢,true說明a、b是同一個對象。

  但a對象是調用Integer.valueOf()生成的,b是通過自動裝箱生成的對象,為什么會是同一個對象呢?再看一下字節碼吧,畢竟Java程序是依靠虛擬機運行字節碼實現的。

  m41這個方法只適用了一次valueOf(),但字節碼中出現了兩次,說明自動裝箱時也調用了valueOf()。

  下面是valueOf()具體實現

  /**

  * Returns a <tt>Integer</tt> instance representing the specified

  * <tt>int</tt> value.

  * If a new <tt>Integer</tt> instance is not required, this method

  * should generally be used in preference to the constructor

  * {@link #Integer(int)}, as this method is likely to yield

  * significantly better space and time performance by caching

  * frequently requested values.

  *

  * @param i an <code>int</code> value.

  * @return a <tt>Integer</tt> instance representing <tt>i</tt>.

  * @since 1.5

  */

  public static Integer valueOf(int i) {

  final int offset = 128;

  if (i >= -128 && i <= 127) { // must cache

  return IntegerCache.cache[i + offset];

  }

  return new Integer(i);

  }

  在【-128,127】之間的數字,valueOf返回的是緩存中的對象,所以兩次調用返回的是同一個對象。

【Java裝箱與拆箱詳解(附實例代碼)】相關文章:

Java自動裝箱與拆箱及其陷阱分析10-11

Java實現在不同線程中運行的代碼實例詳解06-11

java中通用的線程池實例代碼08-27

Java內部類詳解及實例分析06-25

C語言合并排序及實例代碼詳解11-02

C語言文件操作解析詳解及實例代碼10-02

C語言奇偶排序算法詳解及實例代碼10-30

C語言中文件操作詳解及實例代碼08-24

C語言中getch()函數詳解(附實例)08-24

主站蜘蛛池模板: 静安区| 永嘉县| 博乐市| 郯城县| 朝阳市| 遂溪县| 台中市| 滨海县| 京山县| 班玛县| 霍邱县| 中牟县| 安化县| 梓潼县| 汾阳市| 杨浦区| 花莲县| 怀来县| 隆化县| 昌宁县| 宁南县| 泸定县| 台江县| 水富县| 平昌县| 清新县| 博罗县| 襄城县| 安远县| 齐齐哈尔市| 中牟县| 永定县| 扬中市| 永善县| 普陀区| 炉霍县| 博兴县| 磐石市| 容城县| 福清市| 泊头市|