日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基本数据类型及String类

發布時間:2025/3/15 java 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基本数据类型及String类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基本類型,或者叫做內置類型,是JAVA中不同于類的特殊類型。它們是我們編程中使用最頻繁的類型。java是一種強類型語言,第一次申明變量必須說明數據類型,第一次變量賦值稱為變量的初始化。

一、 Java的簡單類型及其封裝器類

Java基本類型共有八種,基本類型可以分為三類,字符類型char,布爾類型boolean以及數值類型byte、short、int、long(整數型)float、double(浮點型)。

Java基本類型存儲在棧中,因此它們的存取速度要快于存儲在堆中的對應包裝類的實例對象。從Java5.0(1.5)開始,JAVA虛擬機(Java Virtual Machine)可以完成基本類型和它們對應包裝類之間的自動轉換。因此我們在賦值、參數傳遞以及數學運算的時候像使用基本類型一樣使用它們的包裝類,但這并不意味著你可以通過基本類型調用它們的包裝類才具有的方法。另外,所有基本類型(包括void)的包裝類都使用了final修飾,因此我們無法繼承它們擴展新的類,也無法重寫它們的任何方法。

  • 基本類型的優勢:數據存儲相對簡單,運算效率比較高
  • 包裝類的優勢:有的容易,比如集合的元素必須是對象類型,滿足了java一切皆是對象的思想

二、Java中的常量(必須放進常量池)

十六進制整型常量:以十六進制表示時,需以0x或0X開頭,如0xff,0X9A。
八進制整型常量:八進制必須以0開頭,如0123,034。
長整型:長整型必須以L作結尾,如9L,342L。
浮點數常量:由于小數常量的默認類型是double型,所以float類型的后面一定要加f(F)。同樣帶小數的變量默認為double類型。
如:float f;
f=1.3f;//必須聲明f。
字符常量:字符型常量需用兩個單引號括起來(注意字符串常量是用兩個雙引號括起來)。Java中的字符占兩個字節。一些常用的轉義字符:
①\r表示接受鍵盤輸入,相當于按下了回車鍵;
②\n表示換行;
③\t表示制表符,相當于Table鍵;
④\b表示退格鍵,相當于Back Space鍵;
⑤’表示單引號;
⑥’'表示雙引號;
⑦\表示一個斜杠\。

三、Java引用類型

Java有 5種引用類型(對象類型):類 接口 數組 枚舉 標注
引用類型:底層結構和基本類型差別較大
JVM的內存空間
(1). Heap 堆空間:分配對象 new Student()
(2). Stack 棧空間:臨時變量 Student stu
(3).Code 代碼區 :類的定義,靜態資源 Student.class

Student stu = new Student(); //new 在內存的堆空間創建對象 stu.study(); //把對象的地址賦給stu引用變量

上例實現步驟:

  • a.JVM加載Student.class 到Code區
  • b.new Student()在堆空間分配空間并創建一個Student實例
  • c.將此實例的地址賦值給引用stu, 棧空間

四、Java中的數據轉換

A.簡單類型數據間的轉換,有兩種方式:自動轉換和強制轉換,通常發生在表達式中或方法的參數傳遞時。
1.自動轉換
具體地講,當一個較"小"數據與一個較"大"的數據一起運算時,系統將自動將"小"數據轉換成"大"數據,再進行運算。而在方法調用時,實際參數較"小",而被調用的方法的形式參數數據又較"大"時(若有匹配的,當然會直接調用匹配的方法),系統也將自動將"小"數據轉換成"大"數據,再進行方法的調用,自然,對于多個同名的重載方法,會轉換成最"接近"的"大"數據并進行調用。這些類型由"小"到"大"分別為 (byte,short,char)--int--long--float—double。這里我們所說的"大"與"小",并不是指占用字節的多少,而是指表示值的范圍的大小。

  • 下面的語句可以在Java中直接通過:
byte b;int i=b; long l=b; float f=b; double d=b;
  • 如果低級類型為char型,向高級類型(整型)轉換時,會轉換為對應ASCII碼值,例如
char c='c'; int i=c; System.out.println("output:"+i);輸出:output:99;
  • 對于byte,short,char三種類型而言,他們是平級的,因此不能相互自動轉換,可以使用下述的強制類型轉換。
short i=99 ; char c=(char)i; System.out.println("output:"+c);輸出:output:c;

2.強制轉換
將"大"數據轉換為"小"數據時,你可以使用強制類型轉換。即你必須采用下面這種語句格式:

int n=(int)3.14159/2;

可以想象,這種轉換肯定可能會導致溢出或精度的下降。

B.表達式的數據類型自動提升, 關于類型的自動提升,注意下面的規則。

  • 所有的byte,short,char型的值將被提升為int型;
  • 如果有一個操作數是long型,計算結果是long型;
  • 如果有一個操作數是float型,計算結果是float型;
  • 如果有一個操作數是double型,計算結果是double型;
byte b; b=3; b=(byte)(b*3);//必須聲明byte。

C.包裝類過渡類型轉換
一般情況下,我們首先聲明一個變量,然后生成一個對應的包裝類,就可以利用包裝類的各種方法進行類型轉換了。例如:

  • 當希望把float型轉換為double型時:
float f1=100.00f; Float F1=new Float(f1); double d1=F1.doubleValue();//F1.doubleValue()為Float類的返回double值型的方法
  • 當希望把double型轉換為int型時:
double d1=100.00; Double D1=new Double(d1); int i1=D1.intValue();
  • 簡單類型的變量轉換為相應的包裝類,可以利用包裝類的構造函數。即:
Boolean(boolean value)Character(char value)Integer(int value)Long(long value)Float(float value)Double(double value)

而在各個包裝類中,總有形為××Value()的方法,來得到其對應的簡單類型數據。利用這種方法,也可以實現不同數值型變量間的轉換,例如,對于一個雙精度實型類,intValue()可以得到其對應的整型變量,而doubleValue()可以得到其對應的雙精度實型變量。

D.字符串與其它類型間的轉換
1.其它類型向字符串的轉換

  • 調用類的串轉換方法:X.toString();
  • 自動轉換:X+"";
  • 使用String的方法:String.volueOf(X);

2.字符串作為值,向其它類型的轉換

  • 先轉換成相應的封裝器實例,再調用對應的方法轉換成其它類型
//字符中"32.1"轉換double型的值的格式為: new Float("32.1").doubleValue()。 也可以用:Double.valueOf("32.1").doubleValue()
  • 靜態parseXXX方法
String s = "1"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f = Float.parseFloat( s ) Double d = Double.parseDouble( s );
  • Character的getNumericValue(char ch)方法

E.Date類與其它數據類型的相互轉換

整型和Date類之間并不存在直接的對應關系,只是你可以使用int型為分別表示年、月、日、時、分、秒,這樣就在兩者之間建立了一個對應關系,在作這種轉換時,你可以使用Date類構造函數的三種形式:

Date(int year, int month, int date):以int型表示年、月、日 Date(int year, int month, int date, int hrs, int min):以int型表示年、月、日、時、分 Date(int year, int month, int date, int hrs, int min, int sec):以int型表示年、月、日、時、分、秒

在長整型和Date類之間有一個很有趣的對應關系,就是將一個時間表示為距離格林尼治標準時間1970年1月1日0時0分0秒的毫秒數。對于這種對應關系,Date類也有其相應的構造函數:Date(long date)。
獲取Date類中的年、月、日、時、分、秒以及星期你可以使用Date類的getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay()方法,你也可以將其理解為將Date類轉換成int。
而Date類的getTime()方法可以得到我們前面所說的一個時間對應的長整型數,與包裝類一樣,Date類也有一個toString()方法可以將其轉換為String類
有時我們希望得到Date的特定格式,例如20020324,我們可以使用以下方法

//首先在文件開始引入 import java.text.SimpleDateFormat; import java.util.*; java.util.Date date = new java.util.Date(); //如果希望得到YYYYMMDD的格式 SimpleDateFormat sy1=new SimpleDateFormat("yyyyMMDD"); String dateFormat=sy1.format(date); //如果希望分開得到年,月,日 SimpleDateFormat sy=new SimpleDateFormat("yyyy"); SimpleDateFormat sm=new SimpleDateFormat("MM"); SimpleDateFormat sd=new SimpleDateFormat("dd"); String syear=sy.format(date); String smon=sm.format(date); String sday=sd.format(date);

F.總結:只有boolean不參與數據類型的轉換

  • 自動類型的轉換:
a.常數在表數范圍內是能夠自動類型轉換的 b.數據范圍小的能夠自動數據類型大的轉換(注意特例)intfloatlongfloatlongdouble 是不會自動轉換的,不然將會丟失精度 c.引用類型能夠自動轉換為父類的 d.基本類型和它們包裝類型是能夠互相轉換的
  • 強制類型轉換:用圓括號括起來目標類型,置于變量前

五、String類

String是java的 一個類,而不是基本數據類型,以下是關于String的幾個面試題:

  • 例1:String類型的st1和st2是否相等
public class MyString {public static void main(String[] args) {String st1 = "abc";String st2 = "abc";System.out.println(st1 == st2);//TrueSystem.out.println(st1.equals(st2)); //True} }

解釋:在Java中==這個符號是比較運算符,它可以基本數據類型和引用數據類型是否相等,如果是基本數據類型,==比較的是值是否相等,如果是引用數據類型,==比較的是兩個對象的內存地址是否相等。而equals是Object這個父類的方法,在String類中重寫了這個equals方法。
內存大致流程:

1)運行先編譯,然后當前類MyString.class文件加載進入內存的方法區 2)第二步,main方法壓入棧內存 3)常量池創建一個“abc”對象,產生一個內存地址 4)然后把“abc”內存地址賦值給main方法里的成員變量st1,這個時候st1根據內存地址,指向了常量池中的“abc”。 5)前面一篇提到,常量池有這個特點,如果發現已經存在,就不在創建重復的對象 6)運行到代碼 Stringst2 =”abc”, 由于常量池存在“abc”,所以不會再創建,直接把“abc”內存地址賦值給了st2 7)最后st1和st2都指向了內存中同一個地址,所以兩者是完全相同的。
  • 例2:下面這句話在內存中創建了幾個對象
String st1 = new String(“abc”);

內存中創建兩個對象,一個在堆內存,一個在常量池,堆內存對象是常量池對象的一個拷貝副本

new出來的對象都是存儲在堆內存。那為什么堆中對象是常量池的對象的拷貝副本。“abc”屬于字符串,字符串屬于常量,所以應該在常量池中創建,所以第一個創建的對象就是在常量池里的“abc”。第二個對象在堆內存為啥是一個拷貝的副本呢,這個就需要在JDK API 1.6找到String(String original)這個構造方法的注釋:初始化一個新創建的 String 對象,使其表示一個與參數相同的字符序列;換句話說,新創建的字符串是該參數字符串的副本。所以,答案就出來了,兩個對象。

  • 例3:以下定義為String類型的st1和st2是否相等
public class MyString {public static void main(String[] args) {String st1 = new String("abc");String st2 = "abc";System.out.println(st1 == st2);//比較內存地址FlaseSystem.out.println(st1.equals(st2));//比較值True} }

  • 例4:以下定義為String類型的st1和st2是否相等
public class MyString {public static void main(String[] args) {String st1 = "a" + "b" + "c";String st2 = "abc";System.out.println(st1 == st2);//trueSystem.out.println(st1.equals(st2));//true} }

解釋:“a”,”b”,”c”三個本來就是字符串常量,進行+符號拼接之后變成了“abc”,“abc”本身就是字符串常量(Java中有常量優化機制),所以常量池立馬會創建一個“abc”的字符串常量對象,在進行st2=”abc”,這個時候,常量池存在“abc”,所以不再創建。所以,不管比較內存地址還是比較字符串序列,都相等。

  • 例5:以下st2和st3是否相等
public class MyString {public static void main(String[] args) {String st1 = "ab";String st2 = "abc";String st3 = st1 + "c";System.out.println(st2 == st3);//falseSystem.out.println(st2.equals(st3));//true} }

第二個是true不用解釋,可第一個判斷為什么是false?需要結合API的注釋說明和內存圖來解釋這個為什么不相等。API的解釋可以濃縮成:str1 與 "c" 進行字符串連接時,底層是通過StringBuffer 進行 append,生成一個StringBuffer對象,然后通過toString()方法,將StringBuffer對象轉為String,此時會產生一個新的堆內存地址,str3指向這個新的內存地址。

內存流程:

1.常量池創建“ab”對象,并賦值給st1,所以st1指向了“ab” 2.常量池創建“abc”對象,并賦值給st2,所以st2指向了“abc” 3.由于這里走的+的拼接方法,所以第三步是使用StringBuffer類的append方法,得到了“abc”,這個時候內存0x123表示的是一個StringBuffer對象,注意不是String對象。 4.調用了Object的toString方法把StringBuffer對象裝換成了String對象。 5.String對象(0x456)賦值給st3

本文參考1
本文參考2

總結

以上是生活随笔為你收集整理的Java基本数据类型及String类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线h网 | 久久久久人妻精品色欧美 | 日日摸夜夜添夜夜 | 国产91丝袜在线播放 | 台湾佬中文在线 | 女女互磨互喷水高潮les呻吟 | 国产人人爽 | 欧洲色视频 | 久久综合中文 | 天天操天天射天天爱 | 影音先锋在线看片资源 | 荫道bbwbbb高潮潮喷 | 中文字幕人成乱码熟女香港 | 99久久久国产精品无码性 | 国产日韩欧美日韩大片 | 免费草逼网站 | 色综合久久五月 | 黑森林福利视频导航 | 国产又色又爽无遮挡免费 | 午夜久久久久久久 | 波多野结衣一本一道 | 青青青青青操 | 黄色天天影视 | 久久老熟女一区二区三区 | 亚洲精华液一区二区 | 男女做爰猛烈吃奶啪啪喷水网站 | 国产高清av在线 | jizz日本在线 | 怡红院av在线 | 成人深夜福利视频 | 日韩一区二区三区在线看 | 欧美日韩亚洲国产 | 色婷婷久久久亚洲一区二区三区 | 日韩精品片 | 亚洲精品男人的天堂 | 亚洲一区二区三区在线播放 | 免费福利在线 | 91精品啪在线观看国产线免费 | 最近中文字幕免费视频 | 欧美在线不卡视频 | 中国a一片一级一片 | 国产www在线 | 91久久中文字幕 | 欧美第一页在线 | 手机在线毛片 | 一级性生活毛片 | 91精品国产一区二区在线观看 | 97精品人妻一区二区三区蜜桃 | 香蕉伊人网 | 日本涩涩网站 | 亚洲区小说 | 免费黄色国产视频 | 日本成人片网站 | 久热最新 | 岛国裸体写真hd在线 | 刘亦菲久久免费一区二区 | 超碰在 | 99爱这里只有精品 | 91中文字幕在线播放 | 久久精品久久久 | 久久另类ts人妖一区二区 | 日韩欧美亚洲国产精品字幕久久久 | 国产97色在线 | 国产 | 在线观看日本视频 | 成人动漫在线观看视频 | 99精品在线播放 | 午夜毛片 | 亚洲鲁鲁 | 九九热只有精品 | 极品91尤物被啪到呻吟喷水 | 在线看h网站 | eeuss鲁丝片一区二区三区 | 国产农村乱对白刺激视频 | 国产午夜大片 | 国产成人综合自拍 | 黄色精品免费 | 日本不卡一区二区在线观看 | 三级网站视频 | 久久新| 黄色网日本| 亚洲av永久无码精品 | 麻豆观看| 天堂中文在线免费观看 | 成人av电影天堂 | 91极品在线 | 国产伊人一区 | 成人综合网站 | 欧美一区二区福利视频 | 亚洲av无码乱码在线观看富二代 | 性色综合| 91蜜桃在线| 美女扒开腿让男生捅 | 九一国产在线 | 中文字幕精品在线视频 | 有码一区二区 | 日韩欧美在线一区二区 | 日韩黄网 | 欧美精品手机在线 | 综合中文字幕 |