《 Java 編程思想》CH03 操作符

来源:https://www.cnblogs.com/wuxiaobai24/archive/2020/02/12/12301885.html
-Advertisement-
Play Games

《 Java 編程思想》CH03 操作符 在最底層,Java中的數據是通過操作符來操作的。 操作符 ,` `, ,`=`與其他語言類似 幾乎所有的操作符只能操作“基本類似”,而 ,`== !=`是例外 String 類支持 和`+=`操作符,表示拼接操作,在進行拼接的操作會嘗試將非 String 的 ...


《 Java 編程思想》CH03 操作符

在最底層,Java中的數據是通過操作符來操作的。

操作符

  • +,-,*,*=與其他語言類似
  • 幾乎所有的操作符只能操作“基本類似”,而===!=是例外
  • String 類支持++=操作符,表示拼接操作,在進行拼接的操作會嘗試將非 String 的元素轉換為 String(調用tostring())
  • 賦值操作符=的左邊(左值)必須是一個明確的已命名的變數。

賦值

在為對象“賦值”時,其實質是拷貝“引用”,需要註意“別名現象”

package com.company.ch03;

class Tank {
    int level;
}

public class Assignment {
    public static void main(String[] args) {
        Tank tank1 = new Tank();
        Tank tank2 = new Tank();
        tank1.level = 12;
        tank2.level = 13;
        System.out.println("tank1 = " + tank1.level);
        System.out.println("tank2 = " + tank2.level);

        tank1 = tank2;
        tank1.level++;
        System.out.println("tank1 = " + tank1.level);
        System.out.println("tank2 = " + tank2.level);
    }
}
//tank1 = 12
//tank2 = 13
//tank1 = 14
//tank2 = 14

方法調用中的別名問題

package com.company.ch03;

class Letter {
    char c;
}

public class PassObject {
    static void f(Letter y) {
        y.c = 'z';
    }

    public static void main(String[] args) {
        Letter x = new Letter();
        x.c = 'a';
        System.out.println("x.c = " + x.c); // a
        f(x);
        System.out.println("x.c = " + x.c); // z
    }
}

不管是那種別名問題,關鍵是要理解到拷貝的是引用,不是對象。

算數操作符 & 自增與自減 & 按位操作符

  • 整數除法不會四捨五入,而是直接捨去小數位
  • 其餘與C++中的一樣

關係操作符

關係操作符與 C++ 也是類似,有一點比較特殊的是在 Java 中==!=可以用在對象上,其比較的是引用,而不是對象內的值,如果要比較兩個對象是否相等(語義上),通常調用equals函數來比較。

Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
n1 == n2; // false
n1.equals(n2); // true

equals預設是比較引用,所以在自己實現的類中需要覆蓋equals方法才能進行語義上的比較

邏輯操作符

&&,||!操作只能用於布爾值,與C++不同,對一個非布爾值進行邏輯運算不會對該值強制轉換,會報編譯錯誤

Java中的邏輯操作符也有“短路”現象

直接常量

  • 十六進位0x/0X首碼+0-9a-f
  • 八進位0首碼+0-8
  • 尾碼l/L表示long類型
  • 尾碼f/F表示float類型
  • 尾碼d/D表示double類型
  • 指數記數法:1.39E-43表示\(1.39 \times e^{-43}\)

移位操作符

  • 移位操作符只能用於處理整數類型
  • >>符號擴展,>>>0擴展
  • 對 char、byte、short 類型進行移位運算,在進行移位之前會先轉回為 int

三元運算符

boolean-exp ? value0 : value1

字元串操作符 ++=

  • 字元串中操作符 ++=表示“拼接”操作
  • 如果一個表達式以字元串開頭,那麼其後續操作數都必須是字元串類型(不是則進行強制轉換)

類型轉換操作符

類型轉換(cast)是指,在適當的時候,Java 會將一種數據類型自動轉換為另一種。

顯式的類型轉換如下:

int i = 200;
long l = (long)i;
int j = (int)l;

類型轉換:

  • 窄式轉換,需要顯式指定(如 long 轉 int)
  • 擴展轉換,無需顯式指定(如 int 轉 long)
  • Java允許任何基本類型之間的類型轉換,除了布爾值。
  • “類”數據類型不允許類型轉換

截尾和舍入

  • 當 float 或 double 轉向整型時,總是對數字進行截尾
  • 如果需要舍入,可以調用java.lang.Math.round()

提升

一個表達式中出現的最大的數據類型決定了該表達式最終結果的數據類型,如 int 類型與 long 類型相加,得到一個 long 類型。

Java 沒有 sizeof

由於Java中所有基本數據類型的大小都是明確的,所以不需要sizeof。BTW,boolean 不是沒有明確嘛。

首發與Code & Fun


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

-Advertisement-
Play Games
更多相關文章
  • 1、工廠模式介紹: 2、簡單工廠模式 3、工廠方法模式 4、小結 5、抽象工廠模式 ...
  • 需求 地區數據往往是存在強上下級關係的一種數據結構,在電商系統中是比較常應用到的,比如北京的下級地區只有海澱區、通州區……,而不會是太原市,而且在開發人員傳遞地區值的時候往往要傳遞很多的值,比如省、市、區、鎮、省Id,市id、區id、鎮id,這樣影響了代碼的美觀性及校驗強上下級關係代碼的複雜性。基於 ...
  • 面向對象編程(OOP)給軟體開發領域帶來了新的設計思想。很多開發人員在進行面向對象編程過程中,往往會在一個類中將具有相同目的/功能的代碼放在一起,力求以最快的方式解決當下的問題。但是,這種編程方式會導致程式代碼混亂和難以維護。因此,Robert C. Martin制定了面向對象編程的五項原則。這五個 ...
  • 1、單例模式介紹 2、餓漢式 3、懶漢式 4、DCL_懶漢式 5、靜態內部類實現 6、利用枚舉來實現 ...
  • 與前面提到的 "數據結構" 相同,隊列中的數據也呈 線性排列 。雖然與 "棧" 有些相似,但隊列中添加和刪除數據的操作分別是在 兩端 進行的,就和隊列這個名字一樣,把它想象成排成一隊的人更容易理解。在隊列中,處理總是從第一名開始往後進行,而新來的人只能排在隊尾。 隊列是什麼? 如上就是隊列的概念圖, ...
  • 一、UML演示Collection集合的繼承結構圖 二、Set集合 1.List存儲元素的特點:有序可重覆。有序,存進去是什麼順序,拿出來還是什麼順序。 2.Set存儲元素的特點:無序不可重覆,存進去的時候是這樣一個順序,拿出來的時候,不一定是原來的順序了。 3.SortedSet特點存儲元素的特點 ...
  • 1.前言 先來說下什麼是數據回顯,比如我要修改我的個人信息,點擊修改按鈕後進入修改界面,在這個界面中直接將原來的信息顯示在表單中,而不是空表單,這就是數據回顯 2.思路 1. 當點擊修改的時候,從資料庫中查詢要修改的整條數據,並將數據存入request域中 2. 轉發到jsp頁面 3. 通過EL表達 ...
  • python數據類型分類 1).數值型:整數型(int)、浮點型(float)、布爾型(bool 取值:True、False) 2).容器類型 : 字元串型(str)、列表(list)、元祖(tuple)、字典(dict)、集合(set) 3).自定義類型:Person、Animal、Dog、Cat ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...