1. 程式人生 > >第一章、基本型別

第一章、基本型別

資料型別劃分

Java資料型別主要分為:基本型別和引用資料型別。
原始資料型別也稱基本資料型別,包括基本的Boolean、byte、char、short、int、long、float、double。另外一種資料型別為引用資料型別,它是一種特殊的方式指向變數的實體,這種機制類似於C/C++的指標。這種變數在宣告時不會分配記憶體,必須另外進行開闢記憶體空間的操作,如字串和陣列均屬於這種資料型別。
變數資料型別

基本資料型別

基本資料型別

  1. 整數型別
    當資料不帶分數或小數時,可以宣告為整數變數,如:3,-127等,Java中整數型別可分為long、int、short、byte這4種,long為64位,也就是8位元組(bytes);int為32位,也就是4位元組,如果資料值在-128~127之間,可以宣告為byte型別,以節省空間。如:
    宣告一個短整型變數sum時,short sum;//宣告sum為短整型
    經過聲明後,Java會在記憶體空間尋找一個佔有兩個位元組的塊供sum變數使用。
    Java中對於整型變數預設為int,所以不要超過int的變數範圍。如以下例子:
public class Test {
	public static void main(String[] args) {
		int i = 9999999999999;
	}
}

直接會報錯,如下:
Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The literal 9999999999999 of type int is out of range

at wutao.com.test.Test.main(Test.java:6)
  1. 資料的溢位
    當整數資料大小超過了可以表示的範圍,而程式中又沒有做數值範圍的檢查時,這個整型變數所輸出的值將發生紊亂,且不是預期的執行結果。如下例項:
    最大整數加1和加2:
public class Test {
   public static void main(String[] args) {
   	int max = Integer.MAX_VALUE;
   	System.out.println("最大整數為::"+max);
   	System.out.println("最大整數加1為::"+(max+1));
   	System.out.println("最大整數加2為::"+(max+2));
   }
}

程式執行結果如下:

最大整數為::2147483647
最大整數加1為::-2147483648
最大整數加2為::-2147483647

從上面可以看出最大整數加1,結果變成範圍中最小的值,加2變成第二小的值,這就是資料的溢位。可以看出,上面例子會出現迴圈,想要避免就必須加上數值範圍檢查機制,或者使用更大的範圍的整數型別,如long。
上面的情況可通過下圖來了解:
資料型別的溢位

為避免int型別的溢位,可以在表示式中的任一常量後加上大寫的L,或在前面加上long,做強制型別轉換。
如下:

public class Test {
	public static void main(String[] args) {
		int max = Integer.MAX_VALUE;
		System.out.println("最大整數為::"+max);
		System.out.println("最大整數加1為::"+(max+1));
		System.out.println("最大整數加2為::"+(max+2));
		System.out.println("最大整數加2為::"+(max+2L));
		System.out.println("最大整數加2為::"+((long)max+2));
	}
}

程式執行結果為:

最大整數為::2147483647
最大整數加1為::-2147483648
最大整數加2為::-2147483647
最大整數加2為::2147483649
最大整數加2為::2147483649

對於int可用long進行強制轉換,對於long的溢位就沒辦法了。

  1. 字元型別
    字元型別在記憶體中佔兩個位元組,可以用來儲存英文字母等。計算機處理字元型別的時候,是把字元當做不同整數對待,嚴格來說字元型別也算整數型別。計算機中所有文字數值都是0/1表示0/1對於設計者來說難以理解,於是產生了各種方式的編碼,通過數值代表指定的字元,如ASCII碼。不同的編碼之間可能產生互相沖突的情況,因此Unicode就產生了,它為每個字元指定唯一的數值,因此,任何平臺程式都可以放心使用。Java就是用的Unicode字元碼系統。

Unicode中的a是以97表示的,在下面程式中可以看到,宣告字元型別的變數ch1、ch2,分別將其設為97,a,再輸出其變數值。

public class Test {
	public static void main(String[] args) {
		char ch1 = 'a';
		char ch2 = 97;
		System.out.println("ch1 = " + ch1);
		System.out.println("ch2 = " + ch2);
	}
}

程式執行結果為:

ch1 = a
ch2 = a

給字元變數賦值數值和字元,都可以正常執行的,注意的是字元需要使用單引號。

如果想要在程式中輸出雙引號的字串時,可以使用字元變數賦值為轉義字元,再將其輸出。即:宣告ch,然後設定為“\””,再進行輸出。或者直接在要輸出的字串中加入特殊的轉義字元,下表為常用的轉義字元:
常用的轉義字元

public class Test {
	public static void main(String[] args) {
		char ch1 = '\"';
		char ch2 = '\\';
		System.out.println("ch1 = " + ch1);
		System.out.println("ch2 = " + ch2);
		System.out.println("\"Hello word\"");
	}
}
ch1 = "
ch2 = \
"Hello word"
  1. 浮點型別和雙精度浮點型別
    帶有小數點的數值在Java中稱為浮點數型別(float),其長度為32位,當範圍不夠大時,還有一種雙精度(double)可用,長度為64位。浮點表達方式除了指數的形式外,還可以帶有小數點的一般形式來表示,例如:宣告一個double的變數num,和一個float型別的變數sum,同時賦值sum為3.0,如下:
		double num;    //宣告num為雙精度浮點型
		float sum = 0.3f; //宣告sum為浮點型,初值為3.0

下面再舉宣告與設定float和double的例子:

		double num1 = -6.3e64;
		double num2 = -5.34E16;
		float num3  =7.32f; 
		float num4  =2.456E67f; //錯誤,已超過表示範圍

注意:使用浮點資料型別時,預設為double,在數值後加上D或者d作為double的標識,可有可無。資料後加上F或f,作為float的標識,如果沒有加上該資料視為double型別,使其精度丟失。

		double num = 3.0f;
		System.out.println("兩個小數相乘: " + (num*num));

結果為:

兩個小數相乘: 9.0
  1. 布林型別
    布林型別變數只有true(真)和false(假)兩種,如宣告flag變數的布林型別,設定為true,使用如下語句:
Boolean flag = true;//宣告flag變數,並賦值為true

布林型別通常用於控制程式流程。

資料型別預設值

Java中如果宣告沒有給賦初值,則會給變數預設值,下表為給出的預設值表:
基本型別預設值表

資料型別的轉換

Java的資料型別在定義時已經確定,因此不能隨意進行資料型別轉化,但是允許使用者有限度做資料轉換處理,轉化方式分為:“自動型別轉換”和“強制型別轉換”。

  1. 資料的自動型別轉換
    程式中已經定義好資料型別的變數,如果要用另外一種資料型別表示,Java在下面條件滿足時,進行自動型別轉換:
  • 轉換前後資料型別相容
  • 轉換後資料類型範圍比轉換前大
    如:short變數a轉換為int型別,由於short和int皆為整數型別,符合第一個條件,int範圍比short大,符合第二個條件,因此Java會自動將原short型別變數轉換為int。
    值得注意的是:轉換隻限於該行語句,並不影響原先定義變數的型別,通過自動轉換可以保證資料的精度,不會因為轉換而丟失精度,這種方式也叫擴大轉換。
    由於Boolean只能存放true和false,與整數及字元是不相容的,無法做資料型別轉換。
    以下舉資料轉換的例項:
	int x=30;
   	float y=22.19f;
   	System.out.println("x/y = " + (x/y));
   	System.out.println("10/3.5 = " + (10/3.5));
   	System.out.println("10/3 = " + (10/3));

程式結果為:

x/y = 1.3519603
10/3.5 = 2.857142857142857
10/3 = 3

由此可以看出,int和float進行計算後,結果為float,int與int計算後,結果仍然為int,自動省略小數部分。

注意:任何型別的資料都向String轉型
String為引用資料型別,此類屬於系統類,對於它需要知道:

  • String 可以像普通變數那樣通過賦值方式進行宣告,字串是使用“”,兩個字串之間可以通過+連線
  • 任何資料型別碰到String型別變數或常量都向String進行轉換。
    如下:
String str = "TAOTAO";
int x = 30;
str = str + x;
System.out.println("str = " + str);
  1. 強制型別轉換
    當兩個int整數計算時,結果也會為int,如:8/3,結果為整數2,並不是實際的2.333…,因此需要做強制型別轉換。
    語法為:
    (需要轉化的資料型別)變數名稱;
    此種方式也稱顯示型別轉換。
    如下例項:
float f = 30.3f;
int x = (int)f;
System.out.println("x = " + x);
System.out.println("10/3 = " +(float)10/3);

執行結果為:

x = 30
10/3 = 3.3333333

只要在變數前加上轉換的資料型別,執行時會自動將此行語句的變數做型別轉換的處理,並不影響原來定義的變數資料型別。
注意:如果將一個超過該變數可表示範圍的值賦值給此變數時,這種稱為縮小轉換。由於轉換過程中可能丟失資料的精確度,Java不會自動做這種型別轉換,因此需要強制型別轉換。

相關推薦

第一基本型別

資料型別劃分 Java資料型別主要分為:基本型別和引用資料型別。 原始資料型別也稱基本資料型別,包括基本的Boolean、byte、char、short、int、long、float、double。另外一種資料型別為引用資料型別,它是一種特殊的方式指向變數的實

HTML--第一基本知識

group 現在 一行 有關 文本框 readonly multi 取值 簽名 知識預覽 HTML 初識 常用標簽 回到頂部 HTML 初識 web服務本質 import socket def main(): sock = socket.socket

LabWindows/CVI第一基本規則

sta 控制 nbsp std class 整型 turn col 浮點型 一、 #include<stdio.h> //頭文件,#號是預處理指令,standard input output header的縮寫。 void main()

第一排隊隊,分果果——排序

算法基礎無處不在的排序 上學時考試成績從高到低排序,前幾名會獲得小花花;淘寶剁手時,銷量從高到低排序,買銷量高的,群眾的眼睛是雪亮的,大家的選擇總沒錯,或者價格從低到高排序,便宜才是硬到底!Windows系統和OS系統文件按照文件名稱、時間排序同樣離不開!第一章、排隊隊,分果果——排序

第七基本數據類型(tuple)

如果 error: error 刪除 位置 str bsp app ror 1.元組是有序的,一般寫元素的時候,推薦在最後加入逗號(,); 2.元組是可以叠代的; tuple_test=(10,20,30,["list","Jim","Mary",(123,"xuhong

SpringCloud(Finchley.SR2)基礎篇:第一服務發現(Eureka)

一、Eureka簡介: Eureka是由Netflix開源的基於REST的服務發現元件,不過出於某種原因2.x以後的版本就停止開源了。Eureka包括Eureka Server(Eureka服務端)和Eucreka Client(Eureka客戶端)。 詳細的介紹將在提高篇進行說明,

Spring學習第一第二節:依賴注入(包括自動裝配,物件的注入)

依賴注入 前言 Spring Bean 定義繼承 Bean 定義模板 正文 Spring依賴注入 基於構造器的依賴注入 基於Setter方法的依賴注入 自

第一spring cloud服務註冊中心eureka---概念

註冊中心Eureka 背景介紹 服務中心 服務中心又稱註冊中心,管理各種服務功能包括服務的註冊、發現、熔斷、負載、降級等,比如dubbo admin後臺的各種功能。 有了服務中心呼叫關係會有什麼變化,畫幾個簡圖來幫忙理解 專案A呼叫專案B 正常呼叫專案A請求專案B

c++程式設計 原理與實踐 第一

c++程式設計 原理與實踐 第一章 沒有重要內容 第二章 hello word 2.2 cout發音see-out 輸出操作符<< 2.3 原始碼字尾 .cpp 目的碼字尾.obj 第一個程式 #include #include #include #i

深入淺出學Vue開發:第一初探Vue

在正式開始學習Vue的知識之前,我們需要先對Vue的整體有一個大致的瞭解。為了達到這個目的,我們需要先了解以下內容。 1、Vue對移動端和瀏覽器版本的支援 2、如何初始化一個Vue的專案 3、Vue的程式碼結構 Vue對移動端和瀏覽器版本的支援 因為Vue本

計算機操作基礎 第一計算機硬體的組成

第一章、計算機硬體的組成 一、計算機硬體組成 1.cpu 2.主機板 3.記憶體 4.硬碟 5.光碟機 6.顯示卡 7.網絡卡 8.音效卡 9.電源 10.作業系統 二、CPU: 1.Intel 1)主頻:2.8-3.7GHZ 2)核心:雙核、四核、八核、十核

01第一神經網路任何工作 1.1到1.8

第 1 章、神經網路如何工作 1.1、尺有所短,寸有所長   計算機和人的關係:尺有所短,寸有所長   有些任務,對傳統的計算機而言很容易,對人類而言卻很難。例如,對數百萬個數字進行乘法運算。   另一方面,有些任務對傳統的計算機而言很難,對人類而言卻很容易。

Java的知識點6—— 強制型別轉換基本型別轉化時常見錯誤和問題 簡單的鍵盤輸入和輸出

 強制型別轉換 強制型別轉換,又被稱為造型,用於顯式的轉換一個數值的型別。在有可能丟失資訊的情況下進行的轉換是通過造型來完成的,但可能造成精度降低或溢位。 public class Test2 { public static void main(String [] ar

10基本型別和包裝類

包裝類 什麼是包裝類?Java裡面8個基本資料型別都有相應的類,這些類叫做包裝類。包裝類有什麼優點可以在物件中定義更多的功能方法操作該資料,方便開發者操作資料,例如基本資料型別和字串之間的轉換。基本資料型別和對應的包裝類 包裝類都在java.lang包裡面 下面以Integer為例來學習一下包裝類

第一第一節 Angular基礎

第一章、第一節 Angular基礎 讓我們先來看看Angular是如何實現元件模式的。 元件模式 Angular 應用程式使用元件模式。你可能聽說過這個模式,它不僅用於軟體開發,還用於製造、建築和其他領域。簡單地說,它涉及到將更小的、離散的構建塊組合成更大的成品。例如,電池是汽車

Spring學習第一 第一節:Spring Ioc容器

前言 上一章講過有關IoC(Inversion of Control 控制反轉)的內容,我們先來看看這指的是什麼: 控制反轉(Inversion of Control,縮寫為IoC),是面向物件程式設計中的一種設計原則,可以用來減低計算機程式碼之間的耦合度。

CLR via C#第一:通用型別系統(CTS)

CLR完全是圍繞型別展開的,型別為應用程式和其他型別公開了功能,通過型別,兩種不同的程式語言之間能夠相互溝通。所以,Microsoft制定了一個正式的規範(CTS),他描述了型別的定義和行為。

Kotlin詳解:第一基本語法

一,簡介 Kotlin是JetBrains開發的基於JVM的語言,Kotlin可以編譯成Java位元組碼,也可以編譯成JavaScript,方便在沒有JVM的裝置上執行。 特點:比Java更安全,能夠靜態檢測常見的陷阱。如:引用空指標。程式碼更易表現,書寫方便,便於閱讀

Spark入門到精通視訊學習資料--第一Scala基礎與實踐

第一章、Scala基礎與實踐(3講) Scala程式語言抓住了很多開發者的眼球。如果你粗略瀏覽Scala的網站,你會覺得Scala是一種純粹的面向物件程式語言,而又無縫地結合了命令式和函式式的程式設計風格。 根據David Rupp在部落格中的說法,Scala可能是下下一代

第一概述

1.名詞解釋 在測試過程和開發交流中經常聽到很多名稱,那這些名稱都代表什麼了,下面我們來講解一下這些名詞。 ● TOP:taobao open platform(淘寶開放平臺,把TOP想象為介於淘寶內網與外部世界之間的一道門,只有特定格式,並被恰當授權的資料才可以通過這道門