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.mzph.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