18禁美女黄网站色大片免费看,铁矿石期货实时行情,猛烈h继攵禁忌h,乱人伦人妻精品一区二区

首頁 > 觀察 >

String內(nèi)存模型和Java常用方法

2023-07-09 15:25:04 博客園

一、String內(nèi)存模型

1、直接賦值創(chuàng)建string對象內(nèi)存原理:

StringTable(串池):字符串常量池,用來存儲字符串,只能是在直接賦值中使用才會存在串池當(dāng)中(JDK7前串池是在方法區(qū)里面,StringTable(串池)在JDK7版本開始從方法區(qū)中挪到了堆內(nèi)存,但是運(yùn)行機(jī)制沒有發(fā)生變化)

eg:


(資料圖片)

首先mian方法進(jìn)棧,創(chuàng)建變量s1,查看串池里面有沒有abc,此時(shí)串池內(nèi)沒有,就創(chuàng)建了一個(gè)新的abc,然后將地址值賦值給s1;

創(chuàng)建變量s2,等號右邊直接賦值,查看串池里面有沒有abc,此時(shí),串池里面已經(jīng)存在abc,就不會創(chuàng)建abc,而是去復(fù)用已經(jīng)存在的abc。

2、小結(jié):

當(dāng)使用雙引號直接賦值時(shí),系統(tǒng)會檢查該字符串在串池中是否存在,如果不存在,創(chuàng)建新的,如果存在,就會復(fù)用

3、特點(diǎn):代碼簡單,節(jié)約內(nèi)存

4、、new關(guān)鍵字創(chuàng)建string對象內(nèi)存原理

這里以字符數(shù)據(jù)為例:

首先main方法進(jìn)棧,執(zhí)行第一行代碼,此時(shí)在堆內(nèi)存當(dāng)中產(chǎn)生一個(gè)char類型的數(shù)組,地址值為0011;再把0011賦值給變量chs;創(chuàng)建s1對象,在堆內(nèi)存創(chuàng)建一個(gè)字符數(shù)組內(nèi)容的小空間,地址值為002,再把002賦值給s1;創(chuàng)建s2對象,在堆內(nèi)存創(chuàng)建一個(gè)字符數(shù)組內(nèi)容的小空間,地址值為003,再把003賦值給s2。

注意:每new一次就會開辟一個(gè)新的空間,而且地址值都不相同,所以,這種方式創(chuàng)建的字符串不會復(fù)用

特點(diǎn):會浪費(fèi)內(nèi)存空間

二、Java常用方法(比較)

1、==號比的是什么?

(1)基本數(shù)據(jù)類型:

基本數(shù)據(jù)類型比較的是數(shù)據(jù)值

(2)引用數(shù)據(jù)類型:

引用數(shù)據(jù)類型比較的是地址值

2、字符串比較

3、直接賦值:

創(chuàng)建變量s1,查看串池里面有沒有abc,此時(shí)串池內(nèi)沒有,就創(chuàng)建了一個(gè)新的abc,然后將地址值賦值給s1;

創(chuàng)建變量s2,等號右邊直接賦值,查看串池里面有沒有abc,此時(shí),串池里面已經(jīng)存在abc,就不會創(chuàng)建abc,而是去復(fù)用已經(jīng)存在的abc。此時(shí)s1和s2指向的是同一個(gè)地址值,所以是True

new關(guān)鍵字賦值:

s1記錄的是堆里面的地址值,s2記錄的是串池中(也是在堆里面)的地址值

4、用字符串比較內(nèi)容:

字符串比較:

(1)boolean equals方法(要比較的字符串) :完全一樣的結(jié)果才是true,否則為false

(2)boole equakslgnoreCase(要比較的字符串) :忽略大小寫的比較

package com.itheima03.String;public class StringDemo02 {    public static void main(String[] args) {        //1、創(chuàng)建兩個(gè)字符串對象        String s1 = new String("abc");        String s2 = "ABc";        //2、==號比較        //引用數(shù)據(jù)類型:比的是地址值        //基本數(shù)據(jù)類型:比的是數(shù)據(jù)值        System.out.println(s1==s2);//false s1記錄的是堆里面的地址值,s2記錄的是串池里面的地址值        //3、比較字符串對象中的內(nèi)容是否相等        boolean result = s1.equals(s2);        System.out.println(result);//false        //4、比較字符串對象中的內(nèi)容是否相等,忽略大小寫(忽略大小寫,只能是英文狀態(tài)下的a和A,漢字的大小寫無法使用)        boolean result1 = s1.equalsIgnoreCase(s2);        System.out.println(result1);//true    }}

運(yùn)行結(jié)果:

falsefalsetrue

鍵盤錄入的字符串與賦值的字符串比較:

package com.itheima03.String;import java.util.Scanner;public class StringDemo03 {    public static void main(String[] args) {        //從鍵盤錄入一個(gè)abc        Scanner sc = new Scanner(System.in);        System.out.println("請輸入一個(gè)字符串");        String s1 = sc.next();        //代碼中再定義一個(gè)字符串a(chǎn)bc        String s2 = "abc";        //用==后比較S1和S2是否一樣        System.out.println(s1==s2);    }}

運(yùn)行結(jié)果:

請輸入一個(gè)字符串a(chǎn)bcfalse

5、### 注意:

字符串錄入的字符串是new出來的,s1與s2的地址值不同,s1是new出來的,是在堆內(nèi)存里面,而s2直接賦值也是在堆內(nèi)存里面,但是是在堆內(nèi)存的串池里面,所以是false

結(jié)論:以后只要想比較字符串的內(nèi)容,就必須使用string里面的方法(equals和equakslgnoreCase)

練習(xí):用戶登錄

需求:

已知正確的用戶名和密碼,請用程序?qū)崿F(xiàn)模擬用戶登錄,總共給三次機(jī)會,登錄之后,給出相應(yīng)的提示

package com.itheima03.String;import java.util.Scanner;/*練習(xí):用戶登錄需求:已知正確的用戶名和密碼,請用程序?qū)崿F(xiàn)模擬用戶登錄,總共給三次機(jī)會,登錄之后,給出相應(yīng)的提示 */public class StringDemo04 {    public static void main(String[] args) {        //1、定義兩個(gè)變量記錄正確的用戶名和密碼        String rightName = "張三";        String rightPassword = "123456";        Scanner sc = new Scanner(System.in);        for (int i = 0; i < 3; i++) {            //2、鍵盤輸入用戶名和密碼            System.out.println("請輸入用戶名:");            String userName = sc.next();//提示和接受錄入的變量一定要在for循環(huán)里面            System.out.println("請輸入密碼:");            String password = sc.next();            //3、比較            if (rightName.equals(userName) && rightPassword.equals(password)) {                System.out.println("登陸成功!");                break;            } else {                if (i == 2) {                    System.out.println("賬號" + userName + "已被鎖定,請聯(lián)系管理員");                } else {                    System.out.println("用戶登錄失敗,用戶名或密碼有誤,您還剩" + (2 - i) + "次機(jī)會");                }            }        }    }}

運(yùn)行結(jié)果:

請輸入用戶名:張三請輸入密碼:123用戶登錄失敗,用戶名或密碼有誤,您還剩2次機(jī)會請輸入用戶名:張三請輸入密碼:1234用戶登錄失敗,用戶名或密碼有誤,您還剩1次機(jī)會請輸入用戶名:張三請輸入密碼:12345賬號張三已被鎖定,請聯(lián)系管理員

關(guān)鍵詞

相關(guān)推薦

亚洲精品人成影精品院| 天空影院播放免费完整版视频| av免费网站在线观看| 女的被弄到高潮娇喘喷水视频| 亚洲无线码一区国产欧美国日产| 国产小受呻吟av视频在线观看| 国产激情无码一区二区三区| 国产+高潮+白浆| 人妻被粗大猛进猛出国产| 学长别揉了我快尿了男男| 成 人 免费 黄 色 网站视频 | 色偷偷88888欧美精品久久久| 日本成熟人妻理伦无码新片| 成人国产精品玖玖热色欲| 天天做天天爱夜夜爽毛片毛片| 特级做a爱片毛片免费看| 讲讲和对象第一次的细节知乎| 成人99精品久久毛片a片小说| 女人和拘做受全过程免费| 成人用品网站| 无码人妻精品一区二区蜜桃| 国产一区二区三区日韩精品| 岳的又肥又大又紧水有多视频| 女局长白白嫩嫩大屁股| 亚洲欧美日韩久久精品第一区| 久久亚洲av永久无码精品| 无人在线观看完整版| 2019国自产拍| 亚洲熟妇丰满多毛xxxx| 无码国产精成人午夜视频一区二区| 2017亚洲天堂最新地址| 久久久久久久久久久国产| 久久永久免费人妻精品直播| 二狗的妖孽人生| 国产又色又爽又黄刺激视频| 学长别揉了我快尿了男男| 肉乳床欢无码a片| 偷窥学校女厕撒尿bbbbb| 日本久久高清一区二区三区毛片| 欧美xxxx做受性欧美88| 医院人妻闷声隔着帘子被中出|