回顧java基礎—Java數據類型

来源:http://www.cnblogs.com/xinyuanran/archive/2016/09/24/5886521.html
-Advertisement-
Play Games

1 java數據類型。8種基本類型,3種引用類型 基本類型(也稱:原始類型):byte、short、int、long、char、float、double、boolean 引用類型:類,介面,數組 2 java基本數據類型 Java 基本類型共有八種,基本類型可以分為三類,字元類型char,布爾類型b ...


1  java數據類型。8種基本類型,3種引用類型

  基本類型(也稱:原始類型):byte、short、int、long、char、float、double、boolean

  引用類型:類,介面,數組

2 java基本數據類型

Java 基本類型共有八種,基本類型可以分為三類,字元類型char,布爾類型boolean以及數值類型byte、short、int、long、 float、double。數值類型又可以分為整數類型byte、short、int、long和浮點數類型float、double。JAVA中的數值 類型不存在無符號的,它們的取值範圍是固定的,不會隨著機器硬體環境或者操作系統的改變而改變。實際上,JAVA中還存在另外一種基本類型void,它也 有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作

  基本數據類型可以分為種類型

 整型:byte、short、int、long

 浮點:float、double

 字元:char

 真值:boolean

類型

byte

short

int

char

long

float

double

boolean

void

大小

1位元組

2位元組

4位元組

2位元組

8位元組

4位元組

8位元組

1位

--

封裝器類

Byte

Short

Integer

Character

Long

Float

Double

Boolean

Void

取值範圍

[-2^7, 2^7 -1]

-128~127

[-2^15,2^15 - 1]

-32768~32767

[-2^31,2^31 - 1]

存儲Unicode碼,用單引號賦值。

[-2^63,2^63 - 1]

數據範圍在3.4e-45~1.4e38

數據範圍在4.9e-324~1.8e308

只有true和false兩個取值。

 

二進位位數

8位

16位

32位

16位

64位

32位

64位

1位

--

 

3 java數據類型之間的轉換

    自動轉換:低級到高級轉換。例如byte a;int b = a;

    強制轉換:高級到低級轉換(會導致溢出或丟失精度)。例如:int b;short a = (short)b;

    註:這裡高、低是指取值範圍。

4 java引用類型

4.1 什麼是引用類型

  引用類型(reference type)指向一個對象,不是原始值,指向對象的變數是引用變數。。

 

4.2 值傳遞和引用傳遞

1)按值傳遞
   
    指的是在方法調用時,傳遞的參數是按值的拷貝傳遞。示例如下:

1.    public class TempTest {
2.        private void test1(int a) {
3.            // 做點事情
4.            a++;
5.        }
6.       
7.        public static void main(String args[]) {
8.            TempTest t = new TempTest();
9.            int a = 3;
10.            t.test1(a);//這裡傳遞的參數a就是按值傳遞。
11.            System.out.printIn("main方法中的a===" + a);
12.         }
13.     }
   
    按值傳遞的重要特點:傳遞的是值的拷貝,也就是說傳遞後就互不相關了。第9行的a和第2行的a是兩個變數,當改變第2行的a的值,第9行a的值是不變的,所以列印結果是3。

    main  方法中的a 為 3
    test1 方法中的a 為 4
   
    我們把第9行的a稱之為實參,第2行的a稱之為形參;對於基本數據類型,形參數據的改變,不影響實參的數據。

    2)按引用傳遞

    指的是在方法調用時,傳遞的參數是按引用進行傳遞,其實傳遞的是引用的地址,也就是變數所對應的記憶體空間的地址。

    示例如下:

1.    public class TempTest {
2.        private void test1(A a) {
3.            a.age = 20;
4.            System.out.printIn("test1方法中的age="+a.age);
5.        }
6.        public static void main(String args[]) {
7.            TempTest t = new TempTest();
8.            A a = new A();
9.            a.age = 10;
10.           t.test1(a);// 這裡傳遞的參數a就是按引用傳遞
11.              System.out.printIn("main方法中的age="+a.age);
12.         }
13.     }
14.     classA {
15.         public int age = 0;
16.     }  

    運行結果如下:test1方法中的age = 20  main方法中的age = 20

    按引用傳遞的重要特點:

    傳遞的是值的引用,也就是說傳遞前和傳遞後都指向同一個引用(也就是同一個記憶體空間)。

    要想正確理解按引用傳遞的過程,就必須學會理解記憶體分配的過程,記憶體分配示意圖可以輔助我們去理解這個過程。

    用上面的例子來進行分析:
  
    (1)、運行開始,運行第8行,創建了一個A的實例,記憶體分配示意圖如下:

      main方法中的a 
   
     

    (2)、運行第9行,修改了A實例裡面的age的值,記憶體分配示意圖如下:   
   
      main方法中的a 
     

 
 
    (3)、運行第10行,是把main方法中的變數a所引用的記憶體空間地址,按引用傳遞給test1方法中的a變數。請註意:這兩個a變數是完全不同的,不要被名稱相同所矇蔽,但它們指向了同一個A實例。記憶體分配示意圖如下:

   

    (4)、運行第3行,為test1方法中的變數a指向A實例的age進行賦值,完成後形成新的記憶體示意圖如下:

    
     此時A實例的age值的變化是由test1方法引起的。
   
    (5)、運行第4行,根據此時的記憶體示意圖,輸出test1方法中的age=20
    
    (6)、運行第11行,根據此時的記憶體示意圖,輸出main方法中的age=20

    3)對上述例子的改變

    理解了上面的例子,可能有人會問,那麼能不能讓按照引用傳遞的值,相互不影響呢?就是test1方法裡面的修改不影響到main方法裡面的呢?

    方法是在test1方法裡面新new一個實例就可以了。改變成下麵的例子,其中第3行為新加的:

1.    public class TempTest {
2.        private void test1(A a) {
3.            a = new A();// 新加的一行
4.            a.age = 20;
5.            System.out.printIn("test1方法中的age="+a.age);
6.        }
7.        public static void main(String args[]) {
8.            TempTest t = new TempTest();
9.            A a = new A();
10.            a.age = 10;
11.           t.test1(a);// 這裡傳遞的參數a就是按引用傳遞
12.              System.out.printIn("main方法中的age="+a.age);
13.         }
14.     }
15.     classA {
16.         public int age = 0;
17.     }  

    運行結果為:test1方法中的age=20  main方法中的age=10

    實現了按引用傳遞的值傳遞前與傳遞後互不影響,還是使用記憶體示意圖來理解一下:

    (1)、運行開始,運行第9行,創建了一個A實例,記憶體分配示意圖如下:
  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • // StringBuffer sb = new StringBuffer();// for(Object bid :list){// sb.append(bid+",");// }// return sb.deleteCharAt(sb.length()-1).toString(); ...
  • Introduction to ASP.NET Core Asp.net core 介紹 270 of 282 people found this helpful By Daniel Roth, Rick Anderson and Shaun Luttin Meng.Net 自譯 ASP.NET C ...
  • 中國式商業智能報表ActiveReports免費公開課,10月20日開講。適合人群:報表開發人員,報表產品經理,商業報表使用構建人員。 ...
  • 20幾歲,怕什麼。 自己的感覺 說一個自己最近使用AngularJS的感受,我們之前使用mvc進行項目開發都是瞭解和經常使用HTML的幫助類,來完成我們前端大部分代碼的編寫,其實在我沒有接觸AngularJS之前對於這種方法還是很喜歡的,畢竟它是將.aspx頁面革命掉的東西,但是隨著項目中使用... ...
  • 2016年9月22日凌晨,微信宣佈“小程式”問世,當然只是開始內測了,微信公眾平臺對200個服務號發送了小程式內測邀請。那麼什麼是“小程式”呢,來看微信之父怎麼說 看完之後,相信大家大概都有些明白了吧,對於開發者來說或許都有些小激動吧,畢竟多關註一些新東西沒什麼不好。那麼問題是“小程式”只有200個 ...
  • 開頭不講"Hello Word",讀盡詩書也枉然 : Word 操作組件介紹 - Spire.Doc 【博主】反骨仔 【原文地址】http://www.cnblogs.com/liqingwen/p/5898368.html 序 本打算過幾天簡單介紹下組件 Spire.XLS,突然發現園友率先發佈了 ...
  • 原文地址:http://yacare.iteye.com/blog/2010049 很多伙伴在更新VS2010,或者卸載VS2012安裝2010後,建立Win32 Console Project/MFC項目時會出現"LINK : fatal error LNK1123: 轉換到 COFF 期間失敗: ...
  • 招聘鏈接:https://job.cnblogs.com/offer/53380/ 工作地點:北京-海澱 工作年限:1年 學歷要求:本科 招聘分類:移動開發工程師 工資範圍:面議 1、扎實的 C#基礎 2、熟練掌握 xaml 頁面開發,懂得響應式佈局 3、至少1年 uwp開發經驗 4、掌握 C/C+ ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...