java中System.out.println()打印輸出結果


疑點:syso()是打印輸出語句,打印的是什么?

syso()不同情況下打印輸出的結果不一樣:

1.

package com.briup;

public class Syso {
    public static void main(String[] args) {
        int i = 1;
        System.out.println(i);
    }
}

結果為:1

2.

public class Syso {
    public static void main(String[] args) {
        //int i = 1;
        //System.out.println(i);
        int[] arr = new int[10];
        System.out.println(arr);
        System.out.println(arr[0]);
    }
}

結果為:[I@15db9742

              0

3.

public class Syso {
    public static void main(String[] args) {
        //int i = 1;
        //System.out.println(i);
        //int[] arr = new int[10];
        //System.out.println(arr);
        //System.out.println(arr[0]);
        Syso ss = new Syso();
System.out.println(ss); System.out.println(ss.age); ss.age
= 10; System.out.println(ss.age); } private int age; //無參構造器 public Syso() { super(); // TODO Auto-generated constructor stub } public Syso(int age) { this.age = age; } }

結果為 :com.briup.Syso@15db9742

               0

              10

 


首先明確 jvm運存內存分配,通俗一點就是堆,棧,方法區,常量區這幾個概念,以及它們之間的聯系,變量 和 方法 在jvm 中是怎么被調用的

其次簡單一點的理解syso() ,我們只要單純的把它看做一種打印輸出的固定形式,不需要去深入了解它在 jvm 中的內存分配 和 及調用

明白為什么會存在地址值,java里面的地址類似與C中的指針,但又有所不一樣。地址值可以看做是棧 和 堆 之間的紐帶!如果變量只是在棧空間被賦值和調用,那么就不存在地址值的概念

(1)中,int i = 1  可以被分解為三個流程  第一,在棧空間內開辟 類型的int 的 空間 ,空間名為i ;第二,棧空間內為數字1開辟一塊空間 ;第三。賦值操作 int空間指向 1的空間 

 注意:這三個步驟都是在棧空間內完成的!平時為了方便理解的操作經常int i = 1 直接理解為只開辟了一塊棧空間

(2)和(3)中  System.out.println(ss.age)打印輸出的結果 原理是想類似的 涉及到2個概念,JVM中 創建數組 和 創建實例化對象的過程 。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM