Java筆記:包裝類、toString()方法、單例類、比較(==和equals方法)

1.包裝類

1)包裝類為基本數據類型提供了相應的引用數據類型。
(基本數據類型-包裝類)
btye-Byte,char-Character,short-Short,float-Float
int-Integer,double-Double,long-Long,boolean-Boolean

2)通過包裝類的構造器來實現吧基本數據類型包裝成包裝類

3)可以通過使用包裝類的xxxValue()實例方法,可以獲得包裝類對象中包裝的基本數據類型。

package cn.it.lsl;public class Primitive2Wrapper {public static void main(String[] args) {boolean b = true;Boolean b1 = new Boolean(b);int a = 5;Integer a1 = new Integer(a);//把一個字符串包裝成包裝類   (Character類除外)Float f = new Float("2.3");Boolean b2 = new Boolean("false");boolean b3 = b2.booleanValue();System.out.println(b3);int aa = a1.intValue();System.out.println(aa);//當用一個字符串來創建Boolean對象時,如果傳入的是字符串"true",或或次字符串不同字母的大小寫變化形式,如"True",都將創建true對應的Boolean對象//當傳入其他字符串時,都會創建false對應的Boolean對象Boolean b4 = new Boolean("true");boolean b5 = b4.booleanValue();System.out.println(b5);}
}

4)以上的轉換比較麻煩,在JDK1.5中提供了自動裝箱和自動拆箱功能實現包裝類跟基本數據類型的轉換。
自動裝箱:把基本數據類型直接賦值給對應的包裝類
自動拆箱:把包裝類直接賦值給對應的基本數據類型
eg:

Integer a = 5;
int b = a;

5)包裝類還可以實現基本類型和字符串之間的轉換。
把字符串類型的值轉換為基本類型的值
(1)利用parseXxx(String s)方法(Charcater除外)
(2)利用包轉類提供的構造器
把基本類型轉為字符串
(1)String類的valueOf()
(2)基本類型和""進行連接運算

package cn.it.lsl;public class Primitive2Wrapper {public static void main(String[] args) {        String str = "23";int a1 = Integer.parseInt(str);int a2 = new Integer(str);System.out.println(a1);System.out.println(a2);String str2 = String.valueOf(2.34f);System.out.println(str2);System.out.println(23+"");}
}

6)包裝類的比較
(1)包裝類可以與基本數據類型比較
(2)因為包裝類是引用數據類型,所以只有兩個包裝類指向用一個對象的時候才會返回true

Integer a = new Integer(6);
System.out.println("6的包裝類是否大于5.0:" + (a>5.0));
System.out.println("2個包裝類的比較:" + (new Integer(2) == new Integer(2)));

7)包裝類比較的特殊情況
自動裝箱的結果

package cn.it.lsl;public class Primitive2Wrapper {public static void main(String[] args) {Integer a = 2;Integer b = 2;System.out.println(a == b);   //輸出true
        Integer a1 = 128;Integer b1 = 128;System.out.println(a1 == b1);    //輸出false
        }
}

分析:以上程序,當兩個2自動裝箱后,比較相等,但是兩個128自動裝箱后就不相等。
這是因為系統內部提供了一個緩存功能,把-128~127之間的整數自動裝箱成一個Integer時,實際上直接指向對象的數值元素,而-128~127范圍外的整數自動裝箱成Integer時,總是新創建一個Integer實例。

2.toString()方法
toString()是Object類里面的一個實例方法,因為所有的類都是Object的子類,所以所有的Java對象都具有toString()方法。
當打印一個對象的時候,總是會調用toString()方法。在缺省狀態下,其輸出時類名、符號名@、對象的hashCode()值。

package cn.it.lsl;public class ToStringWithout {int x;int y;public ToStringWithout(int x,int y){this.x = x;this.y = y;}public static void main(String[] args) {System.out.println(new ToStringWithout(23,33));}
}

輸出:cn.it.lsl.ToStringWithout@bb0d0d

package cn.it.lsl;
//覆蓋toString()方法
public class ToStringWith {int x;int y;public ToStringWith(int x, int y){this.x = x;this.y = y;}public String toString(){return "ToStringWith[" + x + "," + y + "]";}public static void main(String[] args) {System.out.println(new ToStringWith(23,33));}
}

輸出:ToStringWith[23,33]

3.單例類
有時候,不允許自由創建一個類的實例,而只允許該類創建一個對象,這就是單例類。
1)創建單例類的方法
(1)要把構造器使用private修飾,這樣就能避免其他類自由創建該類的實例。
(2)提供一個public方法作為該類的訪問點,用于創建對象,且該方法應該使用static修飾。(因為調用該方法時候,對象還不存在,所以調用該方法的只能是類)
(3)該類中還要有一個緩存對象,用于判斷該類是否已經創建過對象了,這樣才能保證只創建一個對象,該成員應該也要static修飾。

package cn.it.lsl;class Singleton{//使用一個變量來緩存已經創建的實例private static Singleton instance;private Singleton(){}public static Singleton getInstance(){/* 如果instance為null,則還未創建Singleton對象* 如果instance不為null,則表明已經創建了Singleton對象,將不再創建* */if(instance == null){instance = new Singleton();}return instance;}
}public class SingletonTest {public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();System.out.println(s1 == s2);}
}

4.比較(==和equals方法)
1)若使用==對兩個引用類型變量進行比較,他們必須指向同一個對象時,==判斷才會是true。
2)當比較兩個變量時基本類型時,且都是數值類型時,兩個值相等,就會返回true
例如:

int a = 65;
float b = 65.0f;
System.out.println(a == b);
char c = 'A';
System.out.println(a == c);

3)"hello"直接量和new String("hello")的區別?
(1)常量池的概念:專門用于管理在編譯期被確定并被保存在已編譯的.class文件中的一些數據。
(2)當Java程序直接使用形如"hello"的字符串直接了(包括可以在編譯時就計算出來的字符串值)時,JVM將會使用常量池來管理這些字符串。
(3)當使用new String("hello")時,JVM會先使用常量池來管理"hello"直接量,再調用String類的構造器來創建一個新的String對象,新創建的String對象被保存在堆內存中。也就是new String("hello")一共產生了兩個對象。

package cn.it.lsl;public class EqualDemo {public static void main(String[] args) {String s1 = "你好";String s2 = "你";String s3 = "好";String s4 = "你" + "好";        //s4后面的字符串值可以在編譯期就確定下來String s5 = s2 + s3;        //s5后面的字符串值不能再編譯期就確定下來String s6 = new String("你好");System.out.println(s1 == s4);System.out.println(s1 == s5);System.out.println(s1 == s6);}
}

JVM常量池保證相同的字符串直接量只有一個,不會產生多個副本。

4)equals方法
(1)equals方法是Object類提供的一個實例方法,因此所有引用變量都能調用該方法,但是該方法判斷該兩個對象相等的標準與使用==運算符沒有區別,同樣是兩個引用變量指向同一個對象時才會返回true。
(2)String已經重寫了Object的equals()方法,String的equals()方法判斷兩個字符串是否相等的標準是:只要兩個字符串的字符序列相同,就返回true。
(3)Object默認提供的equals()只是比較對象的地址,多數情況下,我們需要重寫equals()方法。

package cn.lsl;class Person{private String name;private String id;public Person() {super();// TODO Auto-generated constructor stub
    }public Person(String name, String id) {super();this.name = name;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public boolean equals(Object obj){if(this == obj)return true;//obj不為null,并且是Person類實例的時候if(obj != null && obj.getClass() == Person.class){Person personObj = (Person)obj;if(this.getId().equals(personObj.getId())){return true;}}return false;}}public class OverrideEqualsRight{public static void main(String[] args) {Person p1 = new Person("劉小明","1213");Person p2 = new Person("小明","1213");Person p3 = new Person("小劉","1215");System.out.println(p1.equals(p2));System.out.println(p2.equals(p3));}
}

?

轉載于:https://www.cnblogs.com/EvanLiu/archive/2013/06/12/3132648.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277061.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277061.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277061.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

log4j.xml引用Javaweb項目中配置文件的參數

2019獨角獸企業重金招聘Python工程師標準>>> 由于最近用阿里云日志服務整合log4j,在配置com.aliyun.openservices.log.log4j.LoghubAppender需要設置一些參數,因為項目中有統一的配置文件,所以想要可以直接在log4j.xml中通過${}來…

……

快瘋了快瘋了…… 我無非是想找人說話。已經幾天沒有講話了。 轉載于:https://www.cnblogs.com/belial/archive/2007/04/13/711429.html

時間換算單位

時鐘周期是一個時間的量,人們規定10納秒(ns)為一個時鐘周期。時鐘周期表示了SDRAM所能運行的最高頻率。更小的時鐘周期就意味著更高的工作頻率。對于PC100規格的內存來說,它的運行時鐘周期應該不高于10納秒。納秒與工作頻率之間的…

砂 即懶且忙 只有隨筆

B同學說:砂,你已經好久沒更新你的博了。是啊,我即懶且忙。上周六爬了青云山,公司組織的。一直懶得處理照片。拍了將近300張的照片,可到現在也就才弄了那么幾張。我自戀。照片是自拍的。娘說:天吶&#xff0…

.Net Core創建Docker鏡像

1、.Net Core項目【Lails.Server.Demo】發布到目錄下Lails.Server.Demo\bin\Release\netcoreapp2.1\publish2、上面目錄下新建文件Dockerfile:# 父鏡像FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base# 設置工作目錄WORKDIR /app# 復制發布文件到/app下COPY …

[原]變參函數原理詳解

/*變參函數原理說明:va_start就是求得第一個可變參的地址.下面幾個宏的作用:保是來確定可變參數的列表中每個參數的地址.實現變參函數的要點,就是想辦法取得每個參數的地址.*/#include <stdio.h> #include <stdarg.h>#if 0#define va_list void*#define va_arg(arg…

Web服務器的配置方法

Web服務器的配置方法 一、 安裝IIS 1. 進入[控制面板]-[新增/移除Windows元件]&#xff0c;勾選Internet Information Servers(IIS)如圖&#xff0c;在安裝過程中需要插入windows操作系統光盤2. 建立虛擬目錄 右擊[我的電腦]--管理&#xff0c;找到[…

2018年開發者生態體系狀態調查報告(第一部分)

在2018年年初&#xff0c;jetbrains公司通過調查6000名開發者來了解開發者的生態狀態&#xff0c;最近&#xff0c;調查結果終于整理完畢&#xff0c;以下是得出的結果。一、 日常工作1.1&#xff09;流行語言&#xff1a;今年&#xff0c;使用最受歡迎、最常用與最有前途的語言…

面向對象三大基本特性,五大基本原則

透切理解面向對象三大基本特性是理解面向對象五大基本原則的基礎. 三大特性是&#xff1a;封裝,繼承,多態 所謂封裝&#xff0c;也就是把客觀事物封裝成抽象的類&#xff0c;并且類可以把自己的數據和方法只讓可信的類或者對象操作&#xff0c;對不可信的進行信息隱藏。封裝是…

人事薪資管理系統V1.00功能簡介(適用于工廠)c#.net+SQL Server2000

1. 統計管理1.1 工廠員工綜合統計1.2 按月統計生產訂單總金額1.3 按月統計員工工資1.4 按月統計員工計件工資1.5 員工生日排行榜2. 人事管理2.1 增加員工信息2.2 上傳或更換員工照片2.3 確認員工基本薪資&#xff08;含包月&#xff0c;計件&#xff0c;計…

運維工程師主要工作是做什么?

總結兩句話&#xff1a; 1、保障業務長期穩定運行&#xff08;如網站服務器、游戲服務器等&#xff09;。 2、保障數據安全可靠&#xff08;如用戶名密碼、游戲數據、博客文章、交易數據等&#xff09;。 由這兩句話推演運維工程師要學些什么&#xff1f; 一、保障業務長期穩定…

python3.7 安裝cx_Freeze

遇到的問題簡單描述&#xff1a; 1&#xff0c;直接 pip install cz_freeze 安裝失敗 2&#xff0c;pip cx_Free-*.*.*.tar.gz 安裝失敗 解決辦法&#xff1a; 1&#xff0c;下載 cx_Freeze-5.1.1-cp37-cp37m-win_amd64.whl &#xff08;地址&#xff1a;https://www.lfd.uci…

SiteMesh參考

SiteMesh參考 作者&#xff1a;kongxx (kongxxgmail.com)安裝 首先從sitemesh下載安裝包&#xff0c;這里使用的是2.2.1版本。 創建一個Web應用程序&#xff0c;這里我創建一個名為myapp的Web應用程序&#xff1b; 復制sitemesh-2.2.1.jar文件到{myapp}/WEB-INF/lib目錄下&am…

精通Spring Boot——第十一篇:使用自定義配置

2019獨角獸企業重金招聘Python工程師標準>>> 今天這篇文章給大家介紹自定義配置的兩種方式 第一式&#xff1a; 使用ConfigurationProperties&#xff0c;且看代碼 package com.developlee.customconfig.config;import org.springframework.boot.context.properties…

MySQL 高可用架構在業務層面的應用分析

MySQL 高可用架構在業務層面的應用分析 http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid208312443&idx1&snf9a0d03dd9a1cf3b3575c0241291e421&scene22&srcidseLU5tmZumKLzwVBIHzM#rd http://mp.weixin.qq.com/s?__bizMzAxNjAzMTQyMA&mid20831244…

使用Expresso學習.net正則表達式

什么是RE?想必各位大大在做文件查找的時侯都有使用過萬用字符”*”&#xff0c;比如說想查找在Windows目錄下所有的Word文件時&#xff0c;你可能就會用”*.doc”這樣的方式來做查找&#xff0c;因為”*”所代表的是任意的字符。RE所做的就是類似這樣的功能&#xff0c;但其功…

數據結構與算法學習筆記之 從0編號的數組

數據結構與算法學習筆記之 從0編號的數組前言數組看似簡單&#xff0c;但掌握精髓的卻沒有多少&#xff1b;他既是編程語言中的數據類型&#xff0c;又是最基礎的數據結構&#xff1b;一個小問題&#xff1a;為什么數據要從0開始編號&#xff0c;而不是 從1開始呢&#xff1f;正…

JAVA四種基本排序總結

JAVA四種基本排序,包括冒泡法,插入法,選擇法,SHELL排序法.其中選擇法是冒泡法的改進,SHELL排序法是 插入法的改進.所以從根本上來說可以歸納為兩種不同的排序方法:即:插入法&#xff06;冒泡法一 插入法:遍歷排序集合&#xff0c;每到一個元素時&#xff0c;都要將這個元素與所…

Windows 故障轉移+Hyper-V 虛機自動遷移高 可用

Windows 故障轉移Hyper-V 虛機自動遷移高 可用 Windows 故障轉移Hyper-V 虛機自動遷移高... 1一、系統原理... 31.1 高效率的 VMbus 架構... 31.2 完美支持 Linux 系統... 4二、架構拓樸... 52.1 網絡及系統架構拓樸... 52.2 域結構拓樸... 5三、實驗資源列表... 63.1 網絡設備…

MSSqlServer基礎學習01

1.新建登陸用戶名&#xff0c;須賦予數據庫訪問權限方可訪問已有的數據庫&#xff0c;可以參考如下圖片轉載于:https://www.cnblogs.com/MyVision/p/11242417.html