javaSE(day02)

1 關(guān)鍵字

1.1 關(guān)鍵字的概述

Java的關(guān)鍵字對(duì)java的編譯器有特殊的意義,他們用來(lái)表示一種數(shù)據(jù)類型,或者表示程序的結(jié)構(gòu)等,關(guān)鍵字不能用作變量名、方法名、類名、包名。

1.2 常見(jiàn)的關(guān)鍵字

備注:不必死記硬背,如果使用關(guān)鍵字作為標(biāo)識(shí)符,編譯器能提示錯(cuò)誤。
goto 是java的保留關(guān)鍵字,意思是java并沒(méi)有使用goto,以后是否使用未定。

2 標(biāo)識(shí)符

2.1 什么是標(biāo)識(shí)符

就是程序員在定義java程序時(shí),自定義的一些名字,例如helloworld 程序里關(guān)鍵字class 后跟的Demo,就是我們定義的類名。類名就屬于標(biāo)識(shí)符的一種。
標(biāo)識(shí)符除了應(yīng)用在類名上,還可以用在變量、函數(shù)名、包名上。(要求同學(xué)們先記住,以后會(huì)詳細(xì)見(jiàn)到這些)。

2.2 標(biāo)識(shí)符必須遵循以下規(guī)則

1. 標(biāo)識(shí)符由26個(gè)英文字符大小寫(xiě)(azAZ)、數(shù)字(0~9)、下劃線(_)和美元符號(hào)($)組成。
2. 不能以數(shù)字開(kāi)頭,不能是關(guān)鍵字
3. 嚴(yán)格區(qū)分大小寫(xiě)
4. 標(biāo)識(shí)符的可以為任意長(zhǎng)度
2.3 標(biāo)識(shí)符案例
2.3.1 合法的標(biāo)識(shí)符

ComputeArea,radius,area $itcast _itcast gz_itcast
注意:由于Java嚴(yán)格區(qū)分大小寫(xiě),ITCAST 和itcast是完全不同的標(biāo)識(shí)符

2.3.2 非法標(biāo)識(shí)符

  1. class (關(guān)鍵字)

  2. 100java(不能以數(shù)字開(kāi)頭)

  3. Hello java (空格不是組成標(biāo)識(shí)符的元素)
    2.3.3 Java中的標(biāo)識(shí)符命名規(guī)范

  4. 包名
    多個(gè)單詞組成時(shí)所有字母小寫(xiě)(例:package com.itcast)

  5. 類名和接口
    多個(gè)單詞組成時(shí)所有單詞的首字母大寫(xiě)(例:HelloWorld)

  6. 變量名和函數(shù)名
    多個(gè)單詞組成時(shí)第一個(gè)單詞首字母小寫(xiě),其他單詞首字母大寫(xiě)(例:lastAccessTime、getTime)。

  7. 常量名
    多個(gè)單詞組成時(shí),字母全部大寫(xiě),多個(gè)單詞之間使用_分隔(例:INTEGER_CACHE)
    注意:只是為了增加規(guī)范性、可讀性而做的一種約定,標(biāo)識(shí)符在定義的時(shí)候最 好見(jiàn)名知意,提高代碼閱讀性。
    3 3.注釋
    3.1 注釋的作用
    通過(guò)注釋提高程序的可讀性,是java程序的條理更加清晰,易于區(qū)分代碼行與注釋行。另外通常在程序開(kāi)頭加入作者,時(shí)間,版本,要實(shí)現(xiàn)的功能等內(nèi)容注釋,方便后來(lái)的維護(hù)以及程序員的交流。
    3.2 注釋的種類
    1.單行注釋(line comment)用//表示,編譯器看到//會(huì)忽略該行//后的所文本
    2.多行注釋(block comment)用//表示,編譯器看到/時(shí)會(huì)搜索接下來(lái)的/,忽略掉//之間的文本。
    3.文檔注釋用/
    /表示,是java特有的注釋,其中注釋內(nèi)容可以被JDK提供的工具 javadoc 所解析,生成一套以網(wǎng)頁(yè)文件形式體現(xiàn)的該程序的說(shuō)明文檔。
    public static void main(String[] args) {
    // 第一步: 獲取半徑?并將半徑保存在程序中
    double radius = 5;
    // 第二步:計(jì)算面積,并將面積保存在程序中
    /

    double area = radius * radius * 3.1415;
    // 第三步:在控制臺(tái)現(xiàn)實(shí)面積
    System.out.println("半徑為" + radius + "的圓的面積為:" + area);
    */

    }
    

注意:多行注釋中可以嵌套單行注釋,多行注釋不能嵌套多行注釋。錯(cuò)誤?。。?/p>

class Demo{
/*
這是主函數(shù),是程序的入口
它的出現(xiàn)可以保證程序的獨(dú)立運(yùn)行
/*
注意:多行注釋嵌套多行注釋是不行的。
*/
*/
public static void main(String[] args){
//這是輸出語(yǔ)句用于將括號(hào)內(nèi)的數(shù)據(jù)打印到控制臺(tái)。
System.out.println("hello java");
}

文檔注釋 (編寫(xiě)軟件說(shuō)明書(shū))
  1. 需要使用sum給我們提供的javadoc工具生成一個(gè)html的說(shuō)明文檔。
  2. 只能抽取public的屬性或者方法內(nèi)容。
    格式:
    Javadoc –d 指定存儲(chǔ)文檔的路徑 -version –author(可選) 目標(biāo)文件
@author 作者
@version 版本
@param 方法的參數(shù)
@return 返回值

注釋的使用細(xì)節(jié):
三種注釋可以出現(xiàn)在程序的任何地方,但是不推薦找任意位置。

  1. 編程習(xí)慣:
    1. 給那條語(yǔ)句進(jìn)行說(shuō)明,注釋?xiě)?yīng)該寫(xiě)在該語(yǔ)句的旁邊。
  2. 單行注釋一般寫(xiě)在語(yǔ)句的后面多行注釋和文檔注釋一般寫(xiě)在語(yǔ)句的上面
    注意:文檔注釋只能出現(xiàn)在類、屬性、方法的上面。

2 注釋的嵌套
1.單行注釋可以在單行注釋里面。
2.多行注釋不能嵌套在多行注釋里面。

3  注釋的調(diào)試作用:
        1. 可以作為初學(xué)者的調(diào)試方式。
        2.  可以幫組初學(xué)者確定代碼的錯(cuò)誤之處。

4 常量
4.1 常量的概述
常量是指在程序運(yùn)行過(guò)程中其值不能改變的量。
4.2 常量類型
Java中常量的分類:
整數(shù)常量 : 所有整數(shù)
小數(shù)常量 : 所有小數(shù)
布爾常量 : 只有true和false
字符常量 :使用’’引起來(lái)的單個(gè)字符
字符串常量 :使用“”引起來(lái)的字符序列,“” 、“a” 、” ”
null常量 : 只有一個(gè)值null
3.char 類型
char類型表示的是單個(gè)字符類型,任何數(shù)據(jù)使用單引號(hào)括起來(lái)的都是表示字符。字符只能有一個(gè)字符,比如:普通的老百姓穿上軍裝就是軍人。
注意:特殊字符的轉(zhuǎn)義序列:轉(zhuǎn)義字符
轉(zhuǎn)義字符的概述:
特殊字符使用”\”把其轉(zhuǎn)化成字符的本身輸出,那么使用”\”的字符稱作為轉(zhuǎn)移字符。
需求:使用輸出語(yǔ)句,打印出帶引號(hào)的信息例如輸出。
System.out.println("teacher said"java is fun"");編譯是無(wú)法正常通過(guò)的。語(yǔ)法有錯(cuò)誤,編譯器讀到第二個(gè)引號(hào)就認(rèn)為是字符串的結(jié)束,剩余的不知道怎么處理。如何解決這個(gè)問(wèn)題:java中使用轉(zhuǎn)義字符來(lái)表示特殊的字符。一個(gè)轉(zhuǎn)義字符以反斜杠(\)開(kāi)始。
問(wèn)題:想要打印帶引號(hào)的字符串怎么辦,就可以使用反斜杠(\)后跟字符,這個(gè)反斜杠就是轉(zhuǎn)義字符。
轉(zhuǎn)義字符 名稱 Unicode
\b Backspace (退格鍵) \u0008
\t Tab (Tab鍵盤(pán)) \u0009
\n Linefeed (換行) \u000A
\r Carriage Return(回車) \u000D
\ Backslash (反斜杠) \u005C
' Single Quote (單引號(hào)) \u0027
" Double Quote (雙引號(hào)) \u0022

\r 表示接受鍵盤(pán)輸入,相當(dāng)于按下回車。
\n 表示換行。
\t 制表符,相當(dāng)于Table鍵
\b 退格鍵,相當(dāng)于Back Space
\’ 單引號(hào)
\’’ 雙引號(hào)
\ 表示一個(gè)斜跨
上述問(wèn)問(wèn)題解決:System.out.println("teacher said"java is fun"");
注意:換行符就是另起一行,回車符就是回到一行的開(kāi)頭,所以我們平時(shí)編寫(xiě)文件的回車符應(yīng)該確切來(lái)說(shuō)叫做回車換行符

  1. boolean 類型
    boolean由數(shù)學(xué)家Geogore Boole 發(fā)明
    boolean 類型用來(lái)存儲(chǔ)布爾值,在java中布爾值只有2個(gè),true和false。
    boolean flag=true;
    flag=false;

Java中這8中基本數(shù)據(jù)類型都是小寫(xiě)的。
5 進(jìn)制的轉(zhuǎn)換
進(jìn)制:進(jìn)制是一種記數(shù)方式 ,可以用有限的數(shù)字符號(hào)代表所有的數(shù)值。由特定的數(shù)值組成。
5.1 整型的表現(xiàn)形式

  1. 十進(jìn)制: 都是以0-9這九個(gè)數(shù)字組成,不能以0開(kāi)頭。
  2. 二進(jìn)制: 由0和1兩個(gè)數(shù)字組成。
  3. 八進(jìn)制: 由0-7數(shù)字組成,為了區(qū)分與其他進(jìn)制的數(shù)字區(qū)別,開(kāi)頭都是以0開(kāi)始。
  4. 十六進(jìn)制:由0-9和A-F組成。為了區(qū)分于其他數(shù)字的區(qū)別,開(kāi)頭都是以ox開(kāi)始。
    5.2 進(jìn)制的由來(lái)
    幾乎每個(gè)民族最早都使用都十進(jìn)制計(jì)數(shù)法,這是因?yàn)槿祟愑?jì)數(shù)時(shí)自然而然地首先使用的是十個(gè)手指。 但是這不等于說(shuō)只有十進(jìn)制計(jì)數(shù)法一種計(jì)數(shù)方法。例如,世界各國(guó)在計(jì)算年月日時(shí)不約而同地使用“十二進(jìn)制”12個(gè)月為一年又如:我國(guó)過(guò)去16兩才算為一斤,這就是“十六進(jìn)計(jì)數(shù)法”,一個(gè)星期七天,這個(gè)就是”七進(jìn)制計(jì)算法”。 計(jì)算機(jī)是由邏輯電路組成,邏輯電路通常只有兩個(gè)狀態(tài),開(kāi)關(guān)的接通與斷開(kāi),這兩種狀態(tài)正好可以用“1”和“0”表示。

如果要在計(jì)算機(jī)里面保存十進(jìn)制的7.
5.2.1 十進(jìn)制與二進(jìn)制之間的轉(zhuǎn)換
十進(jìn)制轉(zhuǎn)二進(jìn)制的轉(zhuǎn)換原理:除以2,反向取余數(shù),直到商為0終止。
二進(jìn)制轉(zhuǎn)十進(jìn)制的轉(zhuǎn)換原理:就是用二進(jìn)制的每一個(gè)乘以2的n次方,n從0開(kāi)始,每次遞增1。然后得出來(lái)的每個(gè)數(shù)相加

存在問(wèn)題:書(shū)寫(xiě)特別長(zhǎng),不方便記憶。

5.2.2 十進(jìn)制與八進(jìn)制之間轉(zhuǎn)換

  1. 八進(jìn)制的由來(lái)
    二進(jìn)位制在計(jì)算機(jī)內(nèi)部使用是再自然不過(guò)的。但在人機(jī)交流上,二進(jìn)位制有致命的弱點(diǎn)——數(shù)字的書(shū)寫(xiě)特別冗長(zhǎng)。例如,十進(jìn)位制的100000寫(xiě)成二進(jìn)位制成為11000011010100000。為了解決這個(gè)問(wèn)題,在計(jì)算機(jī)的理論和應(yīng)用中還使用兩種輔助的進(jìn)位制——八進(jìn)位制和十六進(jìn)位制。二進(jìn)位制的三個(gè)數(shù)位正好記為八進(jìn)位制的一個(gè)數(shù)位,這樣,數(shù)字長(zhǎng)度就只有二進(jìn)位制的三分之一,與十進(jìn)位制記的數(shù)長(zhǎng)度相差不多。例如,十進(jìn)位制的100000寫(xiě)成八進(jìn)位制就是303240。十六進(jìn)位制的一個(gè)數(shù)位可以代表二進(jìn)位制的四個(gè)數(shù)位,這樣,一個(gè)字節(jié)正好是十六進(jìn)位制的兩個(gè)數(shù)位。十六進(jìn)位制要求使用十六個(gè)不同的符號(hào),除了0—9十個(gè)符號(hào)外,常用A、B、C、D、E、F六個(gè)符號(hào)分別代表(十進(jìn)位制的)10、11、12、13、14、15。這樣,十進(jìn)位制的100000寫(xiě)成十六進(jìn)位制就是186A0。

  2. 八進(jìn)制的特點(diǎn)
    由數(shù)字0-7組成。即使用三個(gè)開(kāi)關(guān)表示一個(gè)八進(jìn)制數(shù)。
    10進(jìn)制轉(zhuǎn)換8進(jìn)制原理:就是用十進(jìn)制的數(shù)字不斷除于8,取余數(shù)。

八進(jìn)制轉(zhuǎn)十進(jìn)制原理: 用把進(jìn)制的數(shù)不斷乘以8的n次方,n從0開(kāi)始,每次遞增1。

除了這種方法之外,我們還有另一種方法,因?yàn)槿齻€(gè)開(kāi)關(guān)表示一個(gè)八進(jìn)制數(shù)。

十進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換

十六進(jìn)制特點(diǎn):由0~9 a(10) b(11) c(12) d(13) e(14) f(15)組成。

十進(jìn)制轉(zhuǎn)十六進(jìn)制原理:就是不斷除以16,取余數(shù)。

代碼體現(xiàn):

人使用的十進(jìn)制 、 計(jì)算機(jī)底層處理的數(shù)據(jù)是二進(jìn)制、八進(jìn)制、十六進(jìn)制,

那么如果給計(jì)算機(jī)輸入不同的進(jìn)制數(shù)據(jù)呢?

6 變量

6.1 變量的概述

  1. 變量的概述
    用于存儲(chǔ)可變數(shù)據(jù)的容器。
  2. 變量存在的意義
    計(jì)算機(jī)主要用于處理生活中的數(shù)據(jù),由于生活中存在大量的可變數(shù)據(jù),那么計(jì)算機(jī)就必須具備存儲(chǔ)可變數(shù)據(jù)的能力。
    比如:
    1.時(shí)間每一秒都在發(fā)生變化,根據(jù)不同的時(shí)間要有不同的處理方式。
    2.氣象站會(huì)根據(jù)溫度發(fā)布天氣預(yù)報(bào)信號(hào)。
  3. 變量的特點(diǎn)
    正常情況下牛奶盒裝的都是牛奶,而且會(huì)根據(jù)牛奶的多少去決定要多大的容量的牛奶盒,A和B兩位同學(xué)同時(shí)把牛奶盒放進(jìn)籃子里面,但是需要區(qū)分兩個(gè)牛奶盒是誰(shuí)的,都需要在牛奶盒上做一個(gè)標(biāo)志。
    特點(diǎn):
  4. 必須要有大小
  5. 存儲(chǔ)一定格式的可變數(shù)據(jù)
  6. 必須要有名字
    6.2 變量的聲明
    根據(jù)上述變量的特點(diǎn),所以我們聲明一個(gè)變量的時(shí)候需要確定變量的大小,類型、名字三個(gè)特點(diǎn):
    錯(cuò)誤: 1024byte temp = 1000000;
    錯(cuò)誤原因,java有自己的變量類型。
    6.2.1 變量的數(shù)據(jù)類型
1. 整型
byte   代表一個(gè)字節(jié)的大小   8bit  2(8)   -128~127        256

short 代表兩個(gè)字節(jié)的大小 16bit 2(16) -2(15)~2(15)-1
int 代表四個(gè)字節(jié)的大小 32bit 2(32) -2(31)~2(31)-1
long 代表八個(gè)字節(jié)的大小 64bit 2(64) -2(63)~2(63)-1
如果一個(gè)數(shù)值沒(méi)有采取特殊的處理,那么該整數(shù)默認(rèn)的類型是int。
可以使用數(shù)值后面添加L或小寫(xiě)L改變默認(rèn)的整數(shù)類型。

2. 浮點(diǎn)型
 float  代表四個(gè)字節(jié)的大小  32bit
 double 代表八個(gè)字節(jié)的大小  64bit

java程序中所有的小數(shù)默認(rèn)的類型是double類型,所以需要使用特殊的符號(hào)改變默認(rèn)的小數(shù)類型。

3. 字符型
  char   代表兩個(gè)字節(jié)的大小  16bit  2(16) 
  原理:將字符映射為碼表中對(duì)應(yīng)的十進(jìn)制數(shù)據(jù)加以存儲(chǔ)。
4. 布爾型
   boolean  占一個(gè)字節(jié)。只有true與false兩個(gè)值。

6.2.2 變量的聲明

格式: 數(shù)據(jù)類型 變量名字1 , 變量名字2 ,……變量名字n ,;
案例:
int i 聲明了一個(gè)整形的變量。
double d 聲明了一個(gè)double數(shù)據(jù)類型的變量
float f 聲明了一個(gè)float數(shù)據(jù)類型的變量。
備注:變量名的首字母都一般都是以小寫(xiě)字母開(kāi)始。
6.2.3 變量的初始化
6.2.4 變量的初始化方式
初始化方式1: 數(shù)據(jù)類型 變量名字 = 數(shù)值。
初始化方式2: 數(shù)據(jù)類型 變量名字 , 變量名字 = 數(shù)值。
案例:
方式1: double d = 3.14;
方式2: double d ; d = 3.14 ;

7 java數(shù)據(jù)類型的轉(zhuǎn)換

Java中可以進(jìn)行不同數(shù)據(jù)類型的加減乘除運(yùn)算嗎?是可以的。在算術(shù)運(yùn)算符中已經(jīng)體驗(yàn)過(guò)如果兩個(gè)整數(shù)(int)相除會(huì)去掉小數(shù)部分。如果需要保留小數(shù)部分,可以讓除數(shù)或者被除數(shù)變?yōu)閐ouble類型的(5變?yōu)?.0)。其實(shí)Java是自動(dòng)的將int的那個(gè)數(shù)變?yōu)榱薲ouble類型了也就是Java自動(dòng)的將整數(shù)變?yōu)榱烁↑c(diǎn)數(shù)。例如5/2.0 其實(shí)是5.0/2.0

1、 自動(dòng)類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換)
可以將一個(gè)數(shù)賦值給更大數(shù)值范圍的變量,例如可以經(jīng)byte 變量賦值給short變量可以將short變量賦值給int變量可以將int變量賦值給long變量。

Java內(nèi)部其實(shí)做了工作就是自動(dòng)將數(shù)值進(jìn)行了類型提升,就叫做自動(dòng)類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換)
byte b = 1; //00000001
short s = b; //00000000 00000001
int i = s;
long lon = i;
double d = lon; //1.0

自動(dòng)類型轉(zhuǎn)換(也叫隱式類型轉(zhuǎn)換)
要實(shí)現(xiàn)自動(dòng)類型的轉(zhuǎn)換,需要滿足兩個(gè)條件,第一兩種類型彼此兼容,第二目標(biāo)類型取
值范圍必須大于源類型。所有的數(shù)字類型,包括整形和浮點(diǎn)型彼此都可以進(jìn)行轉(zhuǎn)換。

例如:
byte b=100;
int x=b;
System.out.println(x);//程序把b結(jié)果自動(dòng)轉(zhuǎn)換為int類型。

2、 強(qiáng)制類型轉(zhuǎn)換(也叫顯式類型轉(zhuǎn)換)

不可以將一個(gè)數(shù)值賦給范圍更小數(shù)值范圍的變量,除非進(jìn)行類型轉(zhuǎn)換。
byte b = 100;
b = b + 2;
System.out.println(b);
上述例子發(fā)生了什么,發(fā)生了類型轉(zhuǎn)換。
b+2 遇到了加法運(yùn)算,2默認(rèn)是int類型,byte類型b變量存儲(chǔ)的值自動(dòng)類型提升為
了int類型。執(zhí)行完加法運(yùn)算后的結(jié)果就是int類型,想要將int的類型值放入到byte類型變量b中,無(wú)法放入,編譯報(bào)錯(cuò)。

byte b=1;
b=(byte)(b+2);

當(dāng)兩種類型彼此不兼容,或者目標(biāo)類型取值范圍小于源類型(目標(biāo)是byte源是int)
無(wú)法自動(dòng)轉(zhuǎn)換,此時(shí)就需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。

強(qiáng)制類型轉(zhuǎn)換需要注意:
損失精度!!!
int a=128;
byte b=(byte)a;
System.out.println(b);//-128
/*
* 此時(shí)的強(qiáng)轉(zhuǎn)已經(jīng)造成了數(shù)值的不準(zhǔn)確
*/
int
00000000 00000000 00000000 10000000

10000000
byte

再次分析此行代碼
byte b = 100;
b = b + 2;
System.out.println(b);
編譯:提示如下錯(cuò)誤。

3、類型轉(zhuǎn)換的原理

可以把byte 理解為1兩的碗,short 2兩的碗,int 4兩的碗,long 8兩的碗。1兩碗的滿碗酒可以倒入 2兩 4兩 8兩的碗中。但是 4兩碗的酒倒入1兩碗的酒就有一些問(wèn)題。

1、 什么時(shí)候要用強(qiáng)制類型轉(zhuǎn)換
比如小數(shù)部分只想保留整數(shù)部分.
一定要清楚要轉(zhuǎn)換的數(shù)據(jù)在轉(zhuǎn)換后數(shù)據(jù)的范圍內(nèi)否則會(huì)損失精度.
public static void main(String[] args) {
byte b = 100;
b = (byte) (b + 2);
System.out.println(b); // 102
//舍棄小數(shù)部分
double d=5.5;
int num=(int)d;
}

2、 表達(dá)式的數(shù)據(jù)類型自動(dòng)提升

算術(shù)表達(dá)式,邏輯表達(dá)式
所有的byte型、short型和char的值將被提升到int型。
如果一個(gè)操作數(shù)是long型,計(jì)算結(jié)果就是long型;
如果一個(gè)操作數(shù)是float型,計(jì)算結(jié)果就是float型;
如果一個(gè)操作數(shù)是double型,計(jì)算結(jié)果就是double型。
分析 System.out.println(‘a(chǎn)’+1)結(jié)果?
自動(dòng)類型提升

byte b = 3;
int x = 4;
x = x + b;// b會(huì)自動(dòng)提升為int 類型參與運(yùn)算。
System.out.println(x);// 7

強(qiáng)制類型轉(zhuǎn)換

byte b = 2;
/*
* 強(qiáng)制類型轉(zhuǎn)換,強(qiáng)制將b+2強(qiáng)制轉(zhuǎn)換為byte類型,再賦值給b
*/
b = (byte) (b + 2);
System.out.println(b);// 4
思考1
byte b=126;
問(wèn):既然數(shù)據(jù)默認(rèn)的有數(shù)據(jù)類型,那么126 默認(rèn)是int類型的,為什么存儲(chǔ)到byte類型時(shí)不會(huì)報(bào)錯(cuò)呢。
126 是常量java在編譯時(shí)期會(huì)檢查該常量(每個(gè)常量)是否超出byte類型的范圍。如果沒(méi)有可以賦值。
思考2:byte b=128;能否正常的編譯和運(yùn)行。
該語(yǔ)句會(huì)出現(xiàn)編譯錯(cuò)誤,128超出了byte變量的存儲(chǔ)范圍,所以出現(xiàn)編譯錯(cuò)誤。

思考2
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪一句編譯失???為什么?
b =3+4, 3和4都是常量,所以java在編譯時(shí)期會(huì)檢查該常量(每個(gè)常量)是否超出byte類型的范圍。如果沒(méi)有可以賦值。例如b=128+1 就無(wú)法編譯通過(guò)。b=127+1;也是無(wú)法通過(guò)。
b =b1+b2 不可以,因?yàn)閎1 和b2 是變量,表達(dá)式求值時(shí),變量值會(huì)自動(dòng)提升為int型,表達(dá)式結(jié)果也就成了int型,這是要賦值給byte型的b,必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換了。

6、System.out.println(‘a(chǎn)’+1)結(jié)果
美國(guó)人為了讓計(jì)算機(jī)識(shí)別他們生活中的文字,讓二進(jìn)制表示生活中的文字.所以一個(gè)字母代表了一個(gè)二進(jìn)制.,二進(jìn)制也有十進(jìn)制的表現(xiàn)形式.,把生活中的字母都用數(shù)字來(lái)標(biāo)識(shí),例如97 代表a ,98 代表 b。打印’a’就把a(bǔ)作為輸出顯示,沒(méi)有疑問(wèn)。但是 ‘a(chǎn)’+1 有加號(hào)涉及到了運(yùn)算。根據(jù)java自動(dòng)類型提升規(guī)則,同樣道理 char 提升為int 。就把’a’代表的數(shù)字體現(xiàn)了出來(lái)。a 表示的是97 97+1就是98; 那么 想要查看98 表示的char 是什么 怎么實(shí)現(xiàn)呢 ?就要用到剛才介紹的強(qiáng)制類型轉(zhuǎn)換了 System.out.println(char(‘a(chǎn)’+1));就取到了98 在ASCII碼表中表示的字符。大寫(xiě)A 和小寫(xiě)a 在 ASCII有不同的表現(xiàn)。還有一個(gè)概念字符’1’ 在ASCII中 不是數(shù)字 1,可以運(yùn)行代碼查看,到此就可以明白了char 類型,char類型也是可以參與運(yùn)算的,為什么可以參與運(yùn)算呢。因?yàn)樽址贏SCII表中都有對(duì)應(yīng)的數(shù)字體現(xiàn)。所有的計(jì)算機(jī)兼容ASCII。
System.out.println('a'+1); //98
System.out.println((char)('a'+1)); //b
補(bǔ)充問(wèn)題:
int i='a'+'b';
System.out.println(i);//結(jié)果?
System.out.println("hello"+'j'); //結(jié)果?
總結(jié):
所有數(shù)值運(yùn)算符都可以用在char型數(shù)據(jù)上,如果另一個(gè)操作數(shù)是一個(gè)數(shù)字或者字符,那么char會(huì)自動(dòng)提升為int型,如果另一個(gè)操作數(shù)是字符串,那么字符就會(huì)和字符串相連。

8 java運(yùn)算符

8.1.算術(shù)運(yùn)算符

正負(fù)號(hào)(+,-)

除法

%取模
求余數(shù)

取模的正負(fù)取決與被除數(shù):

1. 自增
(++)前自增:先自增完畢,再運(yùn)算整個(gè)表達(dá)式,語(yǔ)句分號(hào)前面的都是運(yùn)算表達(dá)式;

后自增,先運(yùn)算完整個(gè)表達(dá)式(分號(hào)前面的都是表達(dá)式),再進(jìn)行自增;

  備注:參與自增運(yùn)算的操作數(shù)據(jù)每次會(huì)加1.

結(jié)論:
如果運(yùn)算符在變量的前面,則該變量自增1或者自減1,然后返回的是變量的新值,如
果運(yùn)算符在變量的后面,則變量也會(huì)自增或者自減1,但是返回的是變量原來(lái)的值。++在前就是先運(yùn)算,再取值,++在后就是先取值,再運(yùn)算。

自增自減運(yùn)算符案例:
完成如下運(yùn)算:
一;
int i = 10;
int newNum = 10 * i++;
System.out.println(newNum);//?
二:
int i = 10;
int newNum = 10 * ++i;//?
System.out.println(newNum); //?
一可以理解為
int i = 10;
int newNum = 10 * i;
i = i + 1;
二可以理解為
int i = 10;
i = i + 1;
int newNum = 10 * i;

練習(xí):

  1. 使用程序判斷一個(gè)整數(shù)是偶數(shù)還是奇數(shù)
  2. 使用程序判斷假設(shè)今天是星期4,那么問(wèn)10天后的今天是星期幾?
  3. 將數(shù)值表達(dá)式使用java程序翻譯,并通過(guò)程序求出運(yùn)算結(jié)果
    其中int x=1;int y=2,int a=3,int b=4,int c=5;

案例一:
public static void main(String[] args) {
// 判斷一個(gè)整數(shù)一奇數(shù)還是偶數(shù)
int x = -100;
// 奇數(shù)是,1,3,5...偶數(shù)是2,4,6...顯然整數(shù)除2能整除,也就%(取模)結(jié)果為0就是偶數(shù)。 int result = x % 2;
System.out.println(result);
// 使用判斷語(yǔ)句進(jìn)行判斷。
if (result == 0) {
System.out.println(x + "是偶數(shù)");
} else {
System.out.println(x + "是奇數(shù)");
}
}
方案二 使用判斷該數(shù)結(jié)果是否是奇數(shù)。
(但是該算法有問(wèn)題,如果被判斷的整數(shù)為負(fù)數(shù)是否有效?)
public static void main(String[] args) {
// 判斷一個(gè)整數(shù)一奇數(shù)還是偶數(shù)
int x = 1;
// 奇數(shù)是,1,3,5...偶數(shù)是2,4,6...顯然奇數(shù)%的結(jié)果為1.
int result = x % 2;
System.out.println(result);
// 使用判斷語(yǔ)句進(jìn)行判斷。
if (result == 1) {
System.out.println(x + "是奇數(shù)");
} else {
System.out.println(x + "是偶數(shù)");
}
}
改進(jìn)
public static void main(String[] args) {
// 判斷一個(gè)整數(shù)一奇數(shù)還是偶數(shù)
int x = -1;
// 奇數(shù)是,1,3,5...偶數(shù)是2,4,6...顯然奇數(shù)%的結(jié)果為1.
int result = x % 2;
System.out.println(result);
// 使用判斷語(yǔ)句進(jìn)行判斷。
if (result != 0) {
System.out.println(x + "是奇數(shù)");
} else {
System.out.println(x + "是偶數(shù)");
}
}

案例三:判斷星期
public static void main(String[] args) {
// 設(shè)定今天是星期1,用int 1表示星期一,0表示星期天
int today = 1;
// 十天后是星期幾?,一個(gè)星期是7天,7天之后又是星期1,可以用?
int future = (today+10) % 7;
if (future == 0) {
System.out.println("10天后是星期天");
} else {
System.out.println("10天后是星期:" + future);
}

}

案例4:
int x = 1;
int y = 2;
int a = 3;
int b = 4;
int c = 5;
int result = (3 + 4 * x) / 5 - 10 * (y - 5) * (a + b + c) / x + 9* (4 / x + (9 + x) / y);
System.out.println(result); // 442
8.1 賦值運(yùn)算符
= , +=, -=, *=, /=, %=
運(yùn)算符 運(yùn)算 范例 結(jié)果
= 賦值 a=3,b=2 a=3,b=2
+= 加等于 a=3,b=3;a+=b; a=5,b=2;
-= 減等于 a=3,b=2,a-=b; a=1,b=2;
= 乘等于 a=3,b=2,a=b; a=6,b=2
/= 除等于 a=3,b=2,a/=b; a=1,b=2;
%= 模等于 a=3,b=2,a%=b; a=1,b=2
a+=b 可以想象成 a=a+b;
變量聲明完了之后,可以使用賦值語(yǔ)句(assignment statement)給變量賦一個(gè)值,Java中使用等號(hào)(=)作為基本的賦值運(yùn)算符(assignment operator),
格式如下:
variable = expression;
變量 = 表達(dá)式;

變量我們已經(jīng)知道如何聲明,表達(dá)式具體如何定義?
表達(dá)式的定義:
表達(dá)式涉及到值(常量),變量和通過(guò)運(yùn)算符計(jì)算出的值,以及他們組合在一起計(jì)算出的新值。
x =y+1;

例如:
public static void main(String[] args) {
int x = 1; // 聲明int變量x, 賦值1給變量x
int y = 0; // 聲明int變量y, 賦值0給變量y
double area; // 聲明double變量area
double radius = 1.0; // 聲明double變量radius,并賦值1.0給變量radius
x = 5 * (3 / 2) + 3 * 2; // 將=右半部分表達(dá)式的計(jì)算結(jié)果賦值給變量x
x = y + 1; // 將變量y和1的求和的值賦值給變量x
area = radius * radius * 3.14159; // 將計(jì)算面積的值賦值給變量area
}
賦值運(yùn)算符小問(wèn)題
問(wèn)題1:
int x;
Syst2intln(x = 1);
如何理解?
答:等價(jià)于
x=1;
System.out.println(x);
注意:不能 1=x,變量名必須在賦值運(yùn)算符的左邊。

問(wèn)題二:
int x;
int y;
int z;
x = y = z = 100;
如何理解?
答:等價(jià)于
int x;
int y;
int z;
z = 100;
y = z;
x = y;

問(wèn)題三:short s1 = 1;
s1= s1+1;
s1+=1;
問(wèn):s1= s1+1; s1+=1; 與有什么不同?
對(duì)于short s1 = 1; s1 = s1 + 1; 由于s1+1運(yùn)算時(shí)會(huì)自動(dòng)提升表達(dá)式的類型,所以結(jié)果是int型,再賦值給short類型s1時(shí),編譯器將報(bào)告需要強(qiáng)制轉(zhuǎn)換類型的錯(cuò)誤。
對(duì)于short s1 = 1; s1 += 1;由于 += 是java語(yǔ)言規(guī)定的運(yùn)算符,java編譯器會(huì)對(duì)它進(jìn)行特殊處理,因此可以正確編譯。

8.2 比較運(yùn)算符
如何比較兩個(gè)值?使用比較運(yùn)算符 3和5誰(shuí)大,在java中如何比較?
比較運(yùn)算符比較的兩邊操作數(shù),結(jié)果都是boolean的,只有true和false兩種結(jié)果。
運(yùn)算符 運(yùn)算 例子 結(jié)果
== 相等于 4= =3 false
!= 不等于 4!= 3 true
< 小于 4 < 3 flase

大于 4>3 true
<= 小于等于 4<=3 false
= 大于等于 4>=3 true
Instanceof 檢查是否是類的對(duì)象 "hello"instanceof String true
注意的細(xì)節(jié):
1.使用比較運(yùn)算符的時(shí)候,要求兩種數(shù)據(jù)類型必須一致。
byte、short、char 會(huì)自動(dòng)提升至int。

8.3 邏輯運(yùn)算符
什么是邏輯運(yùn)算符?連接比較運(yùn)算符的符號(hào)稱之為邏輯運(yùn)算符。那么為什么要連接比較運(yùn)算符? 舉例:當(dāng)你去公司應(yīng)聘,招聘要求,男性(判斷為真),并且開(kāi)發(fā)經(jīng)驗(yàn)1年(判斷為假)那么,我們還適合去面試嗎,不能,因?yàn)橹粷M足了一項(xiàng),總體是不滿足的(總體結(jié)果為假)。
邏輯運(yùn)算符用于對(duì)boolean型結(jié)果的表達(dá)式進(jìn)行運(yùn)算,運(yùn)算的結(jié)果都是boolean型。我們的比較運(yùn)算符只能進(jìn)行一次判斷,對(duì)于對(duì)此判斷無(wú)能為力,那么邏輯運(yùn)算符就可以經(jīng)將較運(yùn)算符連接起來(lái)。

邏輯運(yùn)算符用于連接布爾型表達(dá)式,在Java中不可以寫(xiě)成3<x<6,應(yīng)該寫(xiě)成x>3 & x<6 。
“&”和“&&”的區(qū)別:?jiǎn)闻c時(shí),左邊無(wú)論真假,右邊都進(jìn)行運(yùn)算;雙與時(shí),如果左邊為真,右邊參與運(yùn)算,如果左邊為假,那么右邊不參與運(yùn)算。
“|”和“||”的區(qū)別同理,雙或時(shí),左邊為真右邊不參與運(yùn)算。
“ ^ ”異或與“|”或的不同之處是:當(dāng)左右都為true時(shí),結(jié)果為false。
& 與 | 或 ^ 異或 ! 非
1、& 與
true & true = true ;
false & true= false;
true & false = false;
false & false= false;

總結(jié) & 符號(hào)特點(diǎn)
& : 只要兩邊的boolean 表達(dá)式結(jié)果,有一個(gè)false.那么結(jié)果就是false
只有兩邊都為true ,將結(jié)果為true.
2、| 或
true | true =true;
ture | false =true;
false | true =true;
false | false =flase;

總結(jié) | : 兩邊只要有一個(gè)為真結(jié)果就為真,當(dāng)兩邊同為假時(shí)結(jié)果才為假.

3、^ 異或
true ^ true =false;
ture ^ false =true;
false ^ true= true;
false ^ false=flase;

^ : 兩邊相同結(jié)果是false
兩邊不同結(jié)果是true;

4、! 非
!true = false
!false= true

5、&& 短路
研究發(fā)現(xiàn),&運(yùn)算只有兩邊全為真的時(shí)候,結(jié)果才為真,那么當(dāng)左邊為假的時(shí)候就沒(méi)有必要在進(jìn)行判斷,&&就產(chǎn)生了。
int a =4;
a >3 && a< 6;
a >3 & a< 6 ;
在這種情況下世沒(méi)有區(qū)別的
如果:
a =2
a >3 & a< 6 2大于 3 為假, 接著運(yùn)算 2 小于6 為真,總的結(jié)果為假
a >3 && a< 6; 此時(shí)a 不大于3 結(jié)果為false 右邊不運(yùn)算了.即短路.所以&& 比& 效率稍微高了一點(diǎn).
public static void main(String[] args) {
int x = 0;
int y = 1;
if (x == 0 && y == 1) {
System.out.println(x + y);
}
}
8.4 位運(yùn)算符
按位操作符用來(lái)操作整數(shù)基本數(shù)據(jù)類型中的單個(gè)比特(bit),就是二進(jìn)制,按位操作符會(huì)對(duì)兩個(gè)參數(shù)中對(duì)應(yīng)的位(bit)執(zhí)行布爾運(yùn)算,最終生成一個(gè)結(jié)果。按位操作符來(lái)源于C語(yǔ)言面向底層的操作,Java設(shè)計(jì)的初衷是嵌入式電視機(jī)機(jī)頂盒,所以面向底層的操作也保留了下來(lái)。
任何信息在計(jì)算機(jī)中都是以二進(jìn)制的形式保存的,”&”、“|”、“^”除了可以作為邏輯運(yùn)算符也可以作為位運(yùn)算符。位運(yùn)算是直接對(duì)二進(jìn)制進(jìn)行運(yùn)算。他們對(duì)兩個(gè)操作數(shù)中的每一個(gè)二進(jìn)制位都進(jìn)行運(yùn)算。例如int是由32個(gè)二進(jìn)制數(shù)組成,因此使用位運(yùn)算符可以對(duì)整數(shù)值的二進(jìn)制數(shù)進(jìn)行運(yùn)算。
位(bit)運(yùn)算符:
位運(yùn)算符
運(yùn)算符含義

& 與(AND)
| 或(OR)
^ 異或
~ 取反

規(guī)則:
可以把1當(dāng)做true 0當(dāng)做false
只有參與運(yùn)算的兩位都為1,&運(yùn)算的結(jié)果才為1,否則就為0。
只有參加運(yùn)算的兩位都是0,| 運(yùn)算的結(jié)果才是0,否則都是1。
只有參加運(yùn)算的兩位不同,^ 運(yùn)算的結(jié)果才為1,否則就為0。
1、& 與運(yùn)算
& 參見(jiàn)運(yùn)算的兩位數(shù)都為1,&運(yùn)算符結(jié)果才為1,否則就為0。
6&3
00000000 00000000 00000000 00000110 6
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000010 & =2

2、| 或運(yùn)算
| 參與運(yùn)算的兩位都為0,|運(yùn)算的結(jié)果才為0,否則就為1。
00000000 00000000 00000000 00000110 6
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000111 | =7

3、^ 異或運(yùn)算
只有參加運(yùn)算的兩位不同,運(yùn)算的結(jié)果才為1,否則就為0。
00000000 00000000 00000000 00000110 6
00000000 00000000 00000000 00000011 3
00000000 00000000 00000000 00000101 ^ =5

1、 ~ 反碼
就是取反,二進(jìn)制只有1和0,取反就是如果為1,取反就是0,如果是0,取反就是1。

0000-0000 0000-0000 0000-0000 0000-0110 6
1111-1111 1111-1111 1111-1111 1111-1001 取反 -7
System.out.println(~6);//-7
結(jié)論:當(dāng)參與取反的數(shù)值是正數(shù)時(shí),把對(duì)應(yīng)的值加上負(fù)號(hào),再-1;
當(dāng)參與取反的數(shù)值是負(fù)數(shù)時(shí),把對(duì)應(yīng)的值加上負(fù)號(hào),再-1;
負(fù)數(shù)的表現(xiàn)形式就是對(duì)應(yīng)的正數(shù)取反,再加1。負(fù)數(shù)的最高位肯定是1。

4、負(fù)數(shù)表示
負(fù)數(shù)對(duì)應(yīng)的正數(shù)的二進(jìn)制-1,然后取反。
-6
0000-0000 0000-0000 0000-0000 0000-0110 6
1111-1111 1111-1111 1111-1111 1111-1001 取反
1111-1111 1111-1111 1111-1111 1111-1010 加1

5、異或特點(diǎn)
一個(gè)數(shù)異或同一個(gè)數(shù)兩次,結(jié)果還是那個(gè)數(shù). 用處一個(gè)簡(jiǎn)單的加密思想.
633
0000-0000 0000-0000 0000-0000 0000-0110 6
0000-0000 0000-0000 0000-0000 0000-0011 ^3
0000-0000 0000-0000 0000-0000 0000-0101
0000-0000 0000-0000 0000-0000 0000-0011 ^3
0000-0000 0000-0000 0000-0000 0000-0110 結(jié)果是6

除了這些位運(yùn)算操作,還可以對(duì)數(shù)據(jù)按二進(jìn)制位進(jìn)行移位操作,Java的移位運(yùn)算符有三種。

練習(xí):取出一個(gè)二進(jìn)制的某一段。

使用異或(^)數(shù)據(jù)對(duì)數(shù)據(jù)加密
對(duì)兩個(gè)變量的值進(jìn)行互換。
方式1:

對(duì)兩個(gè)變量進(jìn)行值交換(不能使用第三個(gè)變量)
方式2:

兩個(gè)數(shù)相加的時(shí)候,值有可能超出int表示范圍,不推薦。
方式3:

該方式雖然效率高,而且避免了超出int值,但是可讀性較差。
三種方式都可以對(duì)兩個(gè)變量的值進(jìn)行交換,但是推薦使用第一種。(面試除外)
8.5 移位操作符
<< 左移

右移

無(wú)符號(hào)右移

位運(yùn)算符
運(yùn)算符 運(yùn)算 范例
<< 左移 3 << 2 = 12 --> 322=12

右移 3 >> 1 = 1 --> 3/2=1

無(wú)符號(hào)右移 3 >>> 1 = 1 --> 3/2=1
& 與運(yùn)算 6 & 3 = 2
| 或運(yùn)算 6 | 3 = 7
^ 異或運(yùn)算 6 ^ 3 = 5
~ 反碼 ~6 = -7

位運(yùn)算符的細(xì)節(jié)
<< 空位補(bǔ)0,被移除的高位丟棄,空缺位補(bǔ)0。

被移位的二進(jìn)制最高位是0,右移后,空缺位補(bǔ)0;
最高位是1,空缺位補(bǔ)1。

被移位二進(jìn)制最高位無(wú)論是0或者是1,空缺位都用0補(bǔ)。
& 二進(jìn)制位進(jìn)行&運(yùn)算,只有1&1時(shí)結(jié)果是1,否則是0;
| 二進(jìn)制位進(jìn)行 | 運(yùn)算,只有0 | 0時(shí)結(jié)果是0,否則是1;
^ 任何相同二進(jìn)制位進(jìn)行 ^ 運(yùn)算,結(jié)果是0;1^1=0 , 0^0=0

不相同二進(jìn)制位 ^ 運(yùn)算結(jié)果是1。1^0=1 , 0^1=1

技巧:可以理解為二進(jìn)制1就是true,0就是false。

案例:
1、左移 (算術(shù)移位)
3<< 2 是如何在計(jì)算機(jī)里是實(shí)現(xiàn)的?
首先將3轉(zhuǎn)換為2進(jìn)制,
00000000 00000000 00000000 00000011 3 的二進(jìn)制
00000000 00000000 00000000 000011 左移2位,砍掉高位
0000 0000 0000 0000 0000 0000 0000 1100 低位補(bǔ)0
結(jié)果是12,所以3<<2 =12;
結(jié)論:左移就相當(dāng)于乘以2的位移個(gè)數(shù)次冪.

2、右移
6>>2
00000000 00000000 00000000 00000110 6的二進(jìn)制
000000 00000000 00000000 00000001 右移10被砍掉
00000000 00000000 00000000 00000001 高位補(bǔ)0
結(jié)果是1,所以6>>2 =1;

結(jié)論一個(gè)數(shù)往左移越移越大,往右邊移越來(lái)越小.
推論
3<<2=12; 3<<1=6 ; 3<<3=24;
34=12 ; 32=6; 38=24;
3
22=12; 321=6 323 =24;
結(jié)論往左移幾位就是乘以2的幾次冪。
右移規(guī)律
6>>2=1 ;6>>1=3 ;
6/4=1 ; 6/2=3 ;
右移兩位就是除以 2的2次方,右移一位就是除以 2的一次方。
總結(jié) :>> 是除以2的移動(dòng)位數(shù)次冪
<< 是乘以2的移動(dòng)位數(shù)次冪
用處:最快的運(yùn)算是位運(yùn)算。

練習(xí):最有效率的方式算出2乘以8等于幾?

3、無(wú)符號(hào)右移 (邏輯移位)
通過(guò)演示發(fā)現(xiàn)右移時(shí)高位就空了出來(lái), >> 右移時(shí)高位補(bǔ)什么要按照原有 數(shù)據(jù)的最高位來(lái)決定。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>2
1111-1111 1111-1111 1111-1111 1111-0010
最高位補(bǔ)什么要看原有最高位是什么
那么使用>> 后原來(lái)是最高位1 的那么空出來(lái)的最高位還是1 的,是0的還是0。
如果使用>>> 無(wú)論最高位是0還是1 空余最高位都拿0 補(bǔ),這就是無(wú)符號(hào)右移。
1111-1111 1111-1111 1111-1111 1111-1010 -6>>>2
001111-1111 1111-1111 1111-1111 1111-10
結(jié)果是;1073741822
8.6 三元運(yùn)算符
格式
(條件表達(dá)式)?表達(dá)式1:表達(dá)式2;
如果條件為true,運(yùn)算后的結(jié)果是表達(dá)式1;
如果條件為false,運(yùn)算后的結(jié)果是表達(dá)式2;
示例:
1獲取兩個(gè)數(shù)中大數(shù)。
int x=3,y=4,z;
z = (x>y)?x:y;//z變量存儲(chǔ)的就是兩個(gè)數(shù)的大數(shù)。
int x = 1;
int y = 2;
int z;
z = x > y ? x : y;
System.out.println(z); //2
2判斷一個(gè)數(shù)是奇數(shù)還是偶數(shù)。
int x=5;
System.out.println((x%2==0?"偶數(shù)":"奇數(shù)"));
9 運(yùn)算符的優(yōu)先級(jí)與結(jié)合性

10 作業(yè)

  1. 按照標(biāo)準(zhǔn)步驟完成hello world打印。
  2. 如果定義一個(gè)變量,如何使用變量。
  3. 基本數(shù)據(jù)類型有哪些?
  4. 'a'+1,結(jié)果是什么?為什么?都做了什么事情呢?
  5. ++在前,在后的區(qū)別?
  6. short s = 3; s = s+2; s+=2,有什么區(qū)別,為什么?
  7. &和&&的區(qū)別?
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容