主頁 > 軟體設計 > java第二話:java的資料型別與運算子(同C語言在比較下進行學習)

java第二話:java的資料型別與運算子(同C語言在比較下進行學習)

2021-04-05 10:36:36 軟體設計

java資料型別與運算子

  • 資料型別
    • 基本資料型別
      • java資料型別使用的常犯錯誤
        • 整數的默認型別和浮點數的默認型別
        • 過大資料的存盤和資料型別的轉換
          • 整型提升(針對小于四位元組的運算)
          • 算術轉換
        • char型別來表示漢字
        • boolean 與整形能不能進行相互轉換?
        • java中也能對浮點數進行取模運算嗎?
    • 參考資料型別
      • string類
        • 數字轉字串
        • 字串轉數字
  • 運算子
    • 算術運算子
      • 如何保留小數
      • 0不能作為除數
      • 關于負數的除法取模
      • +=,-=,++,-- 的特點
        • 避免產生型別沖突
        • 前置++,-- 和后置++,--的區別
    • 關系運算子
    • 邏輯運算子
      • 短路運算
    • 位運算子
    • 移位運算子
    • 條件運算子

資料型別

下面附上一張java資料型別的表,以便讀者形成整體的觀念,
在這里插入圖片描述

基本資料型別

這里我給讀者一張關于java的資料型別的表,這樣更加方便你們閱讀和查看
在這里插入圖片描述
以上就是java的八大基本資料型別
對于上述表中,大概有幾點需要注意:
1. java中所參照的字符表不再是ASCII碼表,而是Unicode表
2. 包裝類是啥 ?這個在我之后的博客會繼續講解,這里只需記住它們各自的包裝類就好了
3. java中的 byte,short, int, long 沒有無符號數這種概念,它們均為有符號數,即最高位為符號位,剩下的都是數值位
4. java中的char型別無負數,即你不能將一個 -1 賦值給一個char型別(會報錯,C語言中就不會報錯)
5. 除了 int 和 char 對應的包裝類需要特殊記憶,其他資料型別的包裝類就只是首字符大寫就完事了
6. 位元組大小數里 char 和 C 相比發生了改變,還新增了byte 和 boolean ,以及 java中的資料型別是固定的(java語言的可移植性)
7. boolean 是啥?它又叫布爾型別,它只能取 true 或者 false 這兩個值(不像C語言中0為假,非零為真, java中具體的給出了這種型別)

java資料型別使用的常犯錯誤

整數的默認型別和浮點數的默認型別

int a =10;
long b =10;
float c= 10.0;
double d= 10.0;

在上述代碼中,第三行會報錯,為什么呢?因為整數默認型別為 int 型別,而浮點數默認型別為 double 型別,因此,在第三行的時候,就相當于把一個double型別賦值給一個float型別,就會發生資料的截斷而出錯,至于第二行代碼為什么沒出錯是因為將一個int型別賦值給一個long型別是小型別賦值給大型別,因此不會出錯,
但是,為了代碼的安全性,在讀入一個long和float型別的時候,我們可以在整數后面加一個L(大小寫均可),在浮點數后面加一個F(也是大小寫均可),如下面代碼

        int a =10;
        long b =10L;
        float c= 10.0F;
        double d= 10.0;

過大資料的存盤和資料型別的轉換

byte a =128;
int b = 2147483648;

以上兩行代碼均會報錯,因為java是一種強型別的語言,會對右邊將要賦值的資料進行檢查,如果超過了所能存盤的范圍,那么它將報錯,
再看以下代碼

     byte c = 30+30byte b = 127+1;//錯誤代碼(注:127是byte所能存盤的最大值)
    int a= 2147483647+1;//(注:2145483647)

這三行代碼里面只有第二行代碼出錯了,為啥?為什么第三行代碼存盤的值也超過的存盤的范圍,但是不報錯?
對于這個問題我們分兩種情況進行討論()
第一種,賦值給小于四位元組的
第二種,賦值給大于四位元組的
在討論之前,我們就現需要了解整形提升和算術轉換的含義

整型提升(針對小于四位元組的運算)

看如下代碼

    byte h = 10;
    byte i = 21;
    byte m = 10+21;
    byte b = 127+1;//錯誤代碼
    byte j = h+i;//錯誤代碼
    byte k = h+1;//錯誤代碼

為啥上面最后三行代碼會發生錯誤?出錯的原因如下圖
在這里插入圖片描述

因為當進行 h+i 這個運算的時候,計算機發現這是兩個小于4位元組的變數在進行計算,因此會將它們的資料型別提升為四位元組的整形,至于為啥是四位元組,是因為計算機總是以4位元組的形式來拿取資料,提升為四位元組是為了提升計算機的作業效率,
注意剛才我說的是變數在進行計算,你可以這樣來理解,即計算機不知道這個變數到底存了些什么,它只知道這個變數只有兩個位元組,然后就將它提升為四個位元組,以提高作業效率,
但為什么第三行代碼又對,第四行代碼 byte b = 127+1又錯呢?
則會使因為java對右邊的資料進行了數值大小的檢查,它檢查到數值超過了所能存盤的最大值的時候就會將這個較大的數歸屬于存盤范圍更大的整形,因此,第四行代碼也會發生型別的沖突,而第三行不會,

算術轉換

和整形提升差不多,算術轉換是更高位元組之間的轉換,但是依然像整型提升一樣滿足低轉高

        int a =4;
        double c= a/1.0;

我們知道1.0默認的是double型,而當一個整形和一個double型進行運算的結果就會屬于一個double型

總之,對于整形提升和算術轉換我們記住這幾點就好
1.整型提升和算術轉換時自動發生的
2.整型提升和算術轉換都是小轉大,不過整形提升時小于4位元組的都提升為4位元組的整形(注意char型別也會哦),而算術轉換時根據運算元 的資料型別來轉換,

到這,我們了解了整形提升和算術轉換,我們在繼續剛才的兩種情況吧
第一:小于四位元組的運算
1.如果等號右邊只有數值沒有變數,會自動檢查等號右邊的數值
如果只有一個字面常量(不用運算)且大于范圍,那么它會直接報數值過大的錯誤
如果是運算后的結果大于范圍,那么它將會把運算后的結果設定為int型別,然后導致型別沖突發生錯誤,
2. 如果等號右邊有變數,那么將會發生整形提升,然后導致型別沖突
第二:大于四位元組的運算

1.如果等號右邊只有一個字面常量且大于范圍,那么它將會直接報錯,
2.如果有位元組更大的變數,那么將會發生算術轉換,
如果沒有,只是單純的數值運算,結果超出范圍,像下面這樣

 int a= 2147483647+1;//結果是-2147483648

那么它將會進入一個數值的回圈,不會出錯,如下圖
在這里插入圖片描述
即-1+1=0,2147483647+1=-2147483648,這樣回圈著來,也就有了為啥剛剛代碼的結果,
其實byte里面也有這樣的操作,但是不太容易出現,會有整型提升等很多問題直接報錯,看下面的代碼

short a =128byte b =(byte) a;

128已經超過了byte的范圍了,128 = 127+1,如下圖,這里的 b 應該是-128

在這里插入圖片描述

到這,關于這個小知識點的講解大概就完結了,我們再來總結三點
1.這些數值型別都存在如上圖這樣的回圈,但是byte這樣小于四位元組的數字往往會由于整型提升或者其他原因直接報錯,但是int long這樣的資料型別就經常會發生這樣數值的回圈特性,
2.所有型別,如果直接賦值給一個超過范圍的字面常量都是會直接報錯的,,如果不是直接賦值一個字面常量,那么就具體問題具體分析,
3.了解小轉大的整型提升和算術轉換,當然,如果你想大轉小那么強制轉換就行

char型別來表示漢字

這是一個小知識點,一個漢字的大小是兩個位元組,在java中char型別也剛好是兩個位元組,
因此,java中的char型別剛好能表示一個漢字,C語言中則不能

boolean 與整形能不能進行相互轉換?

答案是不能,java中故意設定boolean這種型別的變數就是為了和C語言中用數字非零與否判斷真偽的方式區別開來,因此我們不能寫下面這樣的代碼

   boolean a =0; 
   boolean b =1;

只能寫如下這樣的

boolean a = true;
boolean b = false;

java中也能對浮點數進行取模運算嗎?

答案也是可以的,在C語言中,我們只能對整數進行取模運算,而在java中,我們對浮點數也能進行取模運算,如下圖代碼


double a = 10 % 3.0;

至于為什么要用double型別,上文也已經提到過,1.0是默認double型別,所以運算之后也會默認轉換為double型別

參考資料型別

string類

我們這里只介紹一種參考資料型別,那就是字串型別

String arr = "abcdef";

創建方式很簡單,為什么叫參考型別呢?因為String是在java.lang包的一個String類,
我們的java程式會自動參考java.lang包,所以可以直接使用,
下面介紹字串轉換成數字和數字轉換成字串的方法

數字轉字串

方法一:拼接上一個空字串然后變成字串,例如

int a=29;
String string = a+"";

方法二:采用String類的一個叫valueOf的方法,如下

int a =29;
String string = String.valueOf(a);

字串轉數字

用整形包裝類下面的一個方法:

        String string = "123456";
        int num = Integer.valueOf(string);

運算子

算術運算子

算術運算子包含 ’ + ‘,’ - ‘,’ * ‘,’ / ‘,’%’(加,減,乘,除,取模)
自增自減運算子:+=,-=,++,–

這里需要注意的一點是關于除法的運算

如何保留小數

下面給出一段代碼

        System.out.println(5/2);//結果為2
        System.out.println(5/2.0);//結果為2.5
        System.out.println(5.0/2);//結果為2.5
        System.out.println((float)5/2);//結果為2.5
        System.out.println(5/(float)2);//結果為2.5
        System.out.println((float)(5/2));//結果為2.0

從上面的代碼以及上文對于一個整數和一個浮點數默認的資料型別來看
我們可以發現:
如果不需要保留小數,那么直接用整數之間的除法就可以,如果需要保留小數,至少要保證運算子左右兩邊至少有一個浮點數

0不能作為除數

int a = 10/0;

這段代碼編譯時就會報出下面的例外

在這里插入圖片描述

關于負數的除法取模

下面給出一些例子

        System.out.println(-10/3);//結果為-3
        System.out.println(10/-3);//結果為-3
        System.out.println(-10/-3);//結果為3
        System.out.println(-10%3);//結果為-1
        System.out.println(10%-3);//結果為1
        System.out.println(-10%-3);//結果為-1

我們可以看到負數的除法和我們正常計算的情況一樣,那么負數的取模運算呢?
假如-10%3 或者 -10%-3,我們先商一個 -3 或者 3,那么-10-(-9)或者- 10 - (-9)結果都是剩-1,這個運算很簡單,讀者可以自己去試一試,

+=,-=,++,-- 的特點

避免產生型別沖突

通過上文的閱讀我們知道下面的代碼時會發生整形提升然后報錯

   byte a =10;
   a = a + 1;//這里會發生型別的沖突
   short b =11;
   b = b + 1;//這里也會發生型別的沖突

如果我們使用 a+=1 , b+=1 這樣的代碼就不會出錯,如

byte a =10;
a++;
a+=10;
a--;
a-=2;

所以對于小于4位元組的變數的自增自減,我們可以使用+=或者-=,避免產生型別沖突,

前置++,-- 和后置++,–的區別

        int a =10;
        int b=a++;//這里a先賦值給b,再自增為11
        int c=++a;//這里a先自增為12,再賦值給c
        System.out.println(a);//最終a為12
        System.out.println(b);//b為10
        System.out.println(c);//c為12

由上圖代碼我們可以知道,前置++和后置++的區別就是,前置會先進行自增,再回傳,后置則是先回傳,再自增,
而–和++是同樣的方式操作,
當然如下圖代碼

int a=10;
a++;
++a;

這樣不需要回傳值的時候,二者就沒有區別,

關系運算子

關系運算子有:’ == ’ ,’>=’, <=, >, <, !=(等于,大于等于,小于等于,大于,小于,不等于)
這里和C語言差不多,唯一要注意一點是不要把’=’ 看成 ‘==’,前者是賦值符號,后者是等號

邏輯運算子

邏輯運算子有&&,||,!,&,|(短路與,短路或,邏輯非,邏輯與,邏輯或)
這里和C語言有個區別,那就是java多了兩個邏輯運算子 & 和 | ,與 && 和 || 之間的區別就是
前者不支持短路運算,而后者和C語言一樣支持短路運算

短路運算

因為與的規則是只有運算子兩邊的布爾運算式均為true,結果才為true,只要左邊的運算子為false,那么無論右邊的運算子結果是多少,結果都是false,所以只要左邊的滿足false,那么短路與&&這個運算子將不會檢查右邊的代碼
如下圖代碼

            if(!(20<10 && 10/0==0))
            System.out.println("world");

結果會列印world,并不會報錯,原因是20<10為false,那么結果一定為false,所以也就沒有檢查右邊的錯誤代碼
同理,或的規則是只要有true,那么結果一定為true,短路或 || 也就不會去檢查右邊的代碼

      if(  20>10 || 10/0==0)
            System.out.println("hello");

這里會輸出hello,因為20>10為true,短路與運算子也就不會去檢查右邊的代碼,

位運算子

位運算子主要有:’&’ , ‘|’ , ‘~’, ‘^’(與,或,取反,異或)
啥叫位運算子呢?
因為資料在計算機里面都是以二進制進行存盤的**,位運算子就是對于二進制中的每一位進行位操作**,

按位與:兩個二進制位都為1,那么結果為1,否則結果為0,
按位或:兩個二進制位都為0,那么結果為0,否則結果為1,
按位取反:如果該位為0,那么轉為1,如果該位為1,那么轉為0
按位異或:兩個二進制數相同為0,相異為1

對于某一位資料來說,你與上一個0,相當于置0,因為結果一定是0,那么你與上一個1呢?原資料相當于不改變,是1還是1,是0還是0,
因此我們可以總結一下
與0=置0,與1=不變
或0=不變,或1=置1

對于異或:
0^n=n, 0 異或任何數都是任何數,不改變,

移位運算子

移位運算子有三個:<<,>>,>>>(左移,右移,無符號右移)
‘<<’: 左移的規則是位左移之后,在后面補0, 左移N位相當于乘于2的N次方
‘>>’: 右移的規則是位右移之后,在前面補符號位 右移N位相當于除于2的N次方
‘>>>’:無符號右移的規則是右移之后,在前面補0

條件運算子

條件運算子只有一個:布爾運算式?代碼1:代碼2 (又叫三目運算子)
如果這個布爾運算式為真,那么就會執行代碼1,否則會執行代碼2,舉個例子

        int a = 10;
        int b = 20;
        int c = 30;
        int max = c>(a>b?a:b)?c:(a>b?a:b);//(a>b?a:b)來找出ab之間的最大值,又和c比較,找出三者之間的最大值
        System.out.println(max);

這樣一段代碼就找出了三者之間的最大值,

到這,今天我們關于java的資料型別和運算子的講解就告一段落,如有問題,歡迎指正,想和我一起學習java的小伙伴記得關注我,我之后也會陸續發布關于java的知識點博文,一起加油吧!

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/272525.html

標籤:其他

上一篇:完整版后端三層架構

下一篇:Python 編程1000例(18):查找演算法——分塊查找演算法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more