当前位置:文档之家› 基础类型包装类及java中equals和==的区别

基础类型包装类及java中equals和==的区别

基础类型包装类及java中equals和==的区别
基础类型包装类及java中equals和==的区别

java中equals和==的区别

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。==比较的是2个对象的地址,而equals比较的是2个对象的内容。

显然,当equals为true时,==不一定为true;

一、String中的equals和==

1、

public class TestString {

public static void main(String[] args) {

String s1 = "Monday";

String s2 = "Monday";

}

}

上面这段程序中,到底有几个对象呢?

来检测一下吧,稍微改动一下程序

public class TestString {

public static void main(String[] args) {

String s1 = "Monday";

String s2 = "Monday";

if (s1 == s2)

System.out.println("s1 == s2");

else

System.out.println("s1 != s2");

}

}

编译并运行程序,输出:s1 == s2

说明:s1 与s2 引用同一个String 对象-- "Monday"!

2.再稍微改动一下程序,会有更奇怪的发现:

public class TestString {

public static void main(String[] args) {

String s1 = "Monday";

String s2 = new String("Monday");

if (s1 == s2)

System.out.println("s1 == s2");

else

System.out.println("s1 != s2");

if (s1.equals(s2))

System.out.println("s1 equals s2");

else

System.out.println("s1 not equals s2");

}

}

我们将s2 用new 操作符创建

程序输出:

s1 != s2

s1 equals s2

说明:s1 s2分别引用了两个"Monday"String对象

3. 字符串缓冲池

原来,程序在运行的时候会创建一个字符串缓冲池

当使用s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会

在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被

放到了池中,所以在s2被创建的时候,程序找到了具有相同值的s1

将s2 引用s1 所引用的对象"Monday"

第二段程序中,使用了new 操作符,他明白的告诉程序:

"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创

建在内存中。他们的值相同,但是位置不同,一个在池中游泳

一个在岸边休息。哎呀,真是资源浪费,明明是一样的非要分开做什么呢?

4. 再次更改程序:

public class TestString {

public static void main(String[] args) {

String s1 = "Monday";

String s2 = new String("Monday");

s2 = s2.intern();

if (s1 == s2)

System.out.println("s1 == s2");

else

System.out.println("s1 != s2");

if (s1.equals(s2))

System.out.println("s1 equals s2");

else

System.out.println("s1 not equals s2");

}

}

这次加入:s2 = s2.intern();

程序输出:

s1 == s2

s1 equals s2

原来,(https://www.doczj.com/doc/a14947298.html,ng.String的intern()方法

"abc".intern()方法的返回值还是字符串"abc",表面上看起来好像这个方法没什么用处。但实际上,它做了个小动作:

检查字符串池里是否存在"abc"这么一个字符串,如果存在,就返回池里的字符串;如果不存在,该方法会把"abc"添加到字符串池中,然后再返回它的引用。

更好的办法:

把所有的String都intern()到缓冲池去吧

最好在用到new的时候就进行这个操作

String s2 = new String("Monday").intern();

然后就可以用==比较两个字符串的值了

二、简单数据类型和封装类中的equals和==

Java为每一个简单数据类型提供了一个封装类,每个基本数据类型可以封装成对象类型。

除int(Integer)和char(Character),其余类型首字母大写即成封装类类型名。double (Double), float(Float),long(Long),

short(Short),byte(Byte),boolean(Boolean).

以int和Integer为例说明

Java中int和Integer区别如下:

1.int是基本的数据类型,默认值可以为0;

2.Integer是int的封装类,默认值为null;

3.int和Integer都可以表示某一个数值;

4.int和Integer不能够互用,因为他们两种不同的数据类型;

int a1=1;

int a2=1;

Integer b1 =new Integer (1);

Integer b2 =new Integer (1);

------------------------------

a1==a2 这个是成立的,很简单,都知道

a1==b1 这个是不成立的.表达式的值为false ,它们是不同的数据类型(在jdk1.5以上版本中为true)

b1==b2 这个也是不成立的.表达式的值为false,虽然是相同的数据类型,但是它们是两个对象,==比较的是2个对象的地址,它们的地址是不相等的,内容相等都是1; b1.equals(b2)==true 这个是成立的,表达式的值为true. 相同数据类型,两个对象,地址不同,内容相同, quals比较的是2个对象的内容,所以成立。

(a.equals(b),因为equals比较的是两个对象,所以a,b都不能为基本数据类型,否则会出编译错误。)(在jdk1.5以上版本中,b可以为基本数据类型,a不可以)同理,其它的封装类和基本类型也是这样的.

java中equals和==的区别

==比较的是2个对象的地址,而equals比较的是2个对象的内容。

在jdk1.5以上的版本中,基本类型和封装类能自动转化,与String类型的对象和字符串常量类似。

Integer i1 = 123;

Integer i2 = 123;

int i = 123;

Integer i3 = new Integer(123);

Integer i4 = new Integer(123);

System.out.println("i1 == i2 = "+(i1 == i2));

System.out.println("i1.equals(i2) = "+(i1.equals(i2)));

System.out.println();

System.out.println("i3 == i4 = "+(i3 == i4));

System.out.println("i3.equals(i4) = "+(i3.equals(i4)));

System.out.println();

System.out.println("i2 == i4 = "+(i2 == i4));

System.out.println("i2.equals(i4) = "+(i2.equals(i4)));

System.out.println();

System.out.println("i == i2 = "+(i == i2));

System.out.println("i1.equals(i) = "+(i1.equals(i)));

System.out.println();

System.out.println("i == i4 = "+(i == i4));

System.out.println("i4.equals(i) = "+(i4.equals(i)));

------------------------------

i1 == i2 = true

i1.equals(i2) = true

i3 == i4 = false

i3.equals(i4) = true

i2 == i4 = false

i2.equals(i4) = true

i == i2 = true

i1.equals(i) = true

i == i4 = true

i4.equals(i) = true

三、其他类怎么使用equals和==

API里的类大部分都重写了equals方法,没有重写的一般是自己写的类,

如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,

因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。

四、java里equals和hashCode之间什么关系

只是为了维护hashCode 方法的常规协定,才要求用equals比较的两个对象的hashCode相同.

equals()和hashCode()都来自https://www.doczj.com/doc/a14947298.html,ng.Object.你当然可以重写.

比如a.equals(b).仅当a的内存地址相等时,才返回true.当然如String等类已经对这个方法进行了重写,比较的就不再是内存地址了.

hashCode()的值也是与内存地址相关的.所以仅当内存地址相等时,hashCode才相等.

同样很多类也重写了这个方法,还是以String为例:

public int hashCode() {

int h = hash;

if (h == 0) {

int off = offset;

char val[] = value;

int len = count;

for (int i = 0; i < len; i++) {

h = 31*h + val[off++];

}

hash = h;

}

return h;

}

就不在与内存地址相关了.这样做是为了保证用equals比较返回为true的两个对象,他们的hashCode是相同的.

所以一般重写equals的时候都会重写hashCode().

当然,这个相当于一个约定,一个协议.你不这么做并不会错.

五、hashCode

在一般的应用中你不需要了解hashcode的用法,但当你用到hashmap,hashset 等集合类时要注意下hashcode。

你想通过一个object的key来拿hashmap的value,hashmap的工作方法是,

通过你传入的object的hashcode在内存中找地址,

当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。

所以这里要匹配2部分,hashcode和equals

但假如说你new一个object作为key去拿value是永远得不到结果的,

因为每次new一个object,这个object的hashcode是永远不同的,所以我们要重写hashcode,

你可以令你的hashcode是object中的一个恒量,这样永远可以通过你的object的hashcode来找到key的地址,

然后你要重写你的equals方法,使内存中的内容也相等。。。

另一篇文章:

首先:在java中内存分为“栈”和“堆”这两种(Stack and Heap).基本数据类型存储在“栈”中,对象引用类型实际存储在“堆”中,在栈中只是保留了引用内存的地址值,就好像知道你家门牌号码就可以找到你家。在Java中利用"=="比较变量时候,系统使用变量在stack(栈)中所存的值来作为对比的依据,基本数据类型(int float double boolean)在stack中所存的值就是其內容值,而引用类型在stack中所存放的值是本身所指向Heap中对象的地址值,而不是原先所设定的值。https://www.doczj.com/doc/a14947298.html,ng包中的Object类有public boolean equals (Object obj)方法。它比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。==运算符也进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时,X==Y返回真。当两个分离的对象的内容和类型相配的话,String,Date,File类和所有其它override equals()的包装类(Integer,Double,等等)将返回真。

例如,String类中的equals()方法返回true,当且仅当参数不为null并且是一个String对象,该对象与调用该方法的String对象具有相同的字符顺序。

String s1=new String(“JDK1.2”);

String s2=new String(“JDK1.2”);

方法s1.equals(s2)返回真,尽管s1和s2指向两个不同的对象。

方法是可以被重载的,按照java语言的本意来说:如果没有重写(override)

新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,但是java推荐的是使用equals()方法来判断两个对象的内容是否一样.也就是说一般的类的比较使用override的equals()比较的是Heap而不是stack中的内容。

总结:==比较的是地址,也可以这么认为:==和!=比较的就是对象句柄。equals()方法比较的是内容。但是对于基本数据类型在栈中保存的是其本身值,而对于引用在栈中保存的是对象在堆内存里的地址值。若想对比两个对象的实际内容是否相同,又该如何操作呢?此时,必须使用所有对象都适用的特殊方法equals()。但这个方法不适用于“主类型”,那些类型直接使用==和!=即可。

但是请看下面一段程序:假设您创建了自己的类,就象下面这样:

//: EqualsMethod2.java

class Value {

int i;

}

public class EqualsMethod2 {

public static void main(String[] args) {

Value v1 = new Value();

Value v2 = new Value();

v1.i = v2.i = 100;

System.out.println(v1.equals(v2));

}

} ///:~

此时的结果又变回了false!这是由于equals()的默认行为是比较句柄。所以除非在自己的新类中改变了equals(),否则不可能表现出我们希望的行为。但是大多数Java类库都实现了equals(),所以它实际比较的是对象的内容,而非它们的句柄。

实验5 JAVA常用类

山西大学计算机与信息技术学院 实验报告 姓名学号专业班级 课程名称 Java实验实验日期成绩指导教师批改日期 实验5 JAVA常用类实验名称 一.实验目的: (1)掌握常用的String,StringBuffer(StringBuilder)类的构造方法的使用;(2)掌握字符串的比较方法,尤其equals方法和==比较的区别; (3)掌握String类常用方法的使用; (4)掌握字符串与字符数组和byte数组之间的转换方法; (5)Date,Math,PrintWriter,Scanner类的常用方法。 二.实验内容 1.二进制数转换为十六进制数(此程序参考例题249页9. 2.13) 程序源代码 import java.util.*; public class BinToHexConversion{ //二进制转化为十六进制的方法 public static String binToHex(String bin){ int temp; //二进制转化为十六进制的位数 if(bin.length()%4==0) temp = bin.length()/4; else temp = bin.length()/4 + 1; char []hex = new char[temp]; //十六进制数的字符形式 int []hexDec = new int[temp];//十六进制数的十进制数形式 int j = 0; for(int i=0;i=0&&dec<10) return (char)('0'+dec-0); else if(dec>=10&&dec<=15) return (char)('A'+dec-10); else return '@'; }

java中equals方法的用法以及

java中equals方法的用法以及==的用法(转) equals 方法是https://www.doczj.com/doc/a14947298.html,ng.Object 类的方法。 有两种用法说明: (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。“==”比较两个变量本身的值,即两个对象在内存中的首地址。 “equals()”比较字符串中所包含的内容是否相同。 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"); s2 = new String("abc"); 那么: s1==s2 是false //两个变量的内存地址不一样,也就是说它们指向的对象不一样,故不相等。 s1.equals(s2) 是true //两个变量的所包含的内容是abc,故相等。 注意(1): 如果:StringBuffer s1 = new StringBuffer("a"); StringBuffer s2 = new StringBuffer("a"); 结果:s1.equals(s2) //是false 解释:StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类, 而Object类中的equals方法是用来比较“地址”的,所以等于false. 注意(2): 对于s3和s4来说,有一点不一样要引起注意,由于s3和s4是两个字符 串常量所生成的变量,其中所存放的内存地址是相等的, 所以s3==s4是true(即使没有s3=s4这样一个赋值语句) (2)对于非字符串变量来说,"=="和"equals"方法的作用是相同的都是用来比较其 对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。 比如: class A { A obj1 = new A(); A obj2 = new A(); } 那么:obj1==obj2是false obj1.equals(obj2)是false

java实验报告有理数的类封装

华中科技大学文华学院 《Java程序设计》实验报告 实验三:有理数的类封装 专业班级:通信工程2008级1班姓名: 学号: 时间:

实验三:有理数的类封装 1、实验目的: 让学生学习使用类来封装对象的属性和功能。 2、实验要求: 希望程序能对分数(分子分母都是整数)进行四则运算,而且两个分数四则运算的结果仍然是分数。分数也称有理数。本实验要求用类实现对有理数的封装。有理数有两个重要的成员:分子和分母,另外还有重要的四则运算。 编写一个java应用程序,该程序中有一个Rational(有理数)类,具体要求如下: ※Rational类有两个int型的成员变量,名字分别为numberator(分子)和denominator(分母)。 ※提供Rational add(Rational r)方法,即有理数调用该方法与参数指定的有理数做加法运算,并返回一个 Rational对象。 ※提供Rational sub(Rational r)方法,即有理数调用该方法与参数指定的有理数做减法运算,并返回一个 Rational对象。 ※提供Rational muti(Rational r)方法,即有理数调用该方法与参数指定的有理数做乘法运算,并返回一个 Rational对象。 ※提供Rational div(Rational r)方法,即有理数调用该方法

与参数指定的有理数做除法运算,并返回一个Rational 对象。 3、程序效果图 4、程序代码(主要语句有注释!) 5、实验思考问题 6、实验总结及心得 附录:程序摸版 Rational.java public class Rational { int numerator,denominator; Rational(){} Rational(int a,int b){ setNumeratorAndDenominator(a,b); } void setNumeratorAndDenominator(int a,int b){ //设置分子和分母 int c=f(Math.abs(a),Math.abs(b)); //计算最大公约数 numerator=a/c; denominator=b/c; if(numerator<0&&denominator<0){

hashCode与equals的区别与联系(经典)

hashCode与equals的区别与联系(经典) 一、equals方法的作用1、默认情况(没有覆盖equals 方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等。没有覆盖equals方法代码如下:[java] view plaincopy//学生类public class Student { private int age; private String name; public Student() { } public Student(int age, String name) { super(); this.age = age; https://www.doczj.com/doc/a14947298.html, = name; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { https://www.doczj.com/doc/a14947298.html, = name; } } 测试代码如下:[java] view plaincopyimport java.util.HashSet; import java.util.LinkedList; import java.util.Set; public class EqualsTest { public static void main(String[]

史上最全Java基础知识点归纳

史上最全Java基础知识点归纳 写这篇文章的目的是想总结一下自己这么多年来使用Java的一些心得体会,主要是和一些Java基础知识点相关的,所以也希望能分享给刚刚入门的Java 程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java。 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE 相关的、和Java中各个框架相关的内容。 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容。 1.JVM相关(包括了各个版本的特性) 对于刚刚接触Java的人来说,JVM相关的知识不一定需要理解很深,对此里面的概念有一些简单的了解即可。不过对于一个有着3年以上Java经验的资

深开发者来说,不会JVM几乎是不可接受的。 JVM作为Java运行的基础,很难相信对于JVM一点都不了解的人可以把Java语言吃得很透。我在面试有超过3年Java经验的开发者的时候,JVM几乎就是一个必问的问题了。当然JVM不是唯一决定技术能力好坏的面试问题,但是可以佐证Java开发能力的高低。 在JVM这个大类中,我认为需要掌握的知识有: JVM内存模型和结构 GC原理,性能调优 调优:Thread Dump,分析内存结构 class二进制字节码结构,class loader体系,class加载过程,实例创建过程 方法执行过程 Java各个大版本更新提供的新特性(需要简单了解) 2.Java的运行(基础必备) 这条可能出看很简单,Java程序的运行谁不会呢?不过很多时候,我们只是单纯通过IDE去执行Java程序,底层IDE又是如何执行Java程序呢?很多人并不了解。

Java中关于==和equal的区别+以及equals()方法重写

Java中关于==和equal的区别以及equals()方法重写 例子i: string1="aaa"; string2="aaa"; String string3=new String("aaa"); String string4=new String("aaa"); string1==string2 // true; . string1.equals(string2);//true; string3==string4;//false 因为用new创建了2个对象,所以是两个不同的内存地址 string3.equals(string4);//true 而String类的是不可改变的,所以会指向同一个内存地址,所以返回为true equals()是object的方法,所以只是适合对象,不适合于基本类型,equals()默认是用"=="比较两个对象的内存地址,如果想要比较两个对象的内容,要重写equals()方法才可...而==可以比较两个基本类型,也可以是对象... String的equals()方法重写: public boolean equals(Object object){ if( this==anObject) {return true;} if(anObject instancdOf String) {String anotherString =(String)anObject; int n= count; if(n==anotherString.count) { char V1[]=value; char V2[]=anotherString.value; int i=offset; int j=anotherString.offset; while(n--!=0) { if (v1[i++]!=V2[j++] return false;} return true;} }

Java基础入门教程(适合所有初学者)

第1章 Java语言概述与面向对象思想 1 1.1 Java语言的发展 1 1.1.1 Java语言的产生 1 1.1.2 Java语言的发展 1 1.2 Java语言的特点 2 1.3 面向对象与面向过程的差异 3 1.3.1 面向过程思想回顾 4 1.3.2 面向对象思想介绍 4 1.4 面向对象程序设计中的主要概念和特征 4 1.4.1 主要概念 5 1.4.2 主要特征 5 *1.5 Java与C++的差异 5 1.6本章小结5 习题 5 第2章 Java语言开发环境 6 2.1 JDK 6 2.1.1 JDK的简介6 2.1.2 JDK的构成6 2.1.3 JDK的使用6 2.2 IDE 8 2.2.1 IDE简介8 2.2.2 JBuilder 9 2.2.3 Eclipse 9 2.2.4 相关资源9 2.3 Project管理9 2.3.1 Project的含义9 2.3.2 可行的Project组织模式9 2.3.3 主要开发工具的Project目录10 2.4 本章小结10 习题10 第1章 Java语言概述与面向对象思想 1.1 Java语言的发展 1.1.1 Java语言的产生以介绍面向对象编程的基本概念、基本理论为重点,结合Java语言的语法规则、编程特点和设计思想、强调容易发生错误和编程应注意的地方,使学生能对Java 技术有一个总体了解,通过本课程学习,使学生掌握Java语言的基础知识,理解和掌握面向对象程序设计的基本思想,熟练地使用Java语言进行程序的编写、编译以及调试工作 上世纪90年代初期,Sun公司在研究一种适用于未来的智能设备的编程语言,该语言要具有一些新的特性,以避免C++的一些不足。 该语言起初命名为Oak,来源于语言作者Gosling办公室窗外的一棵橡树(Oak)。后来在注册时候遇到了冲突,于是就从手中的热咖啡联想到了印度尼西亚一个盛产咖啡的岛屿,中文名叫爪哇,Java语言得名于此。 随着Internet的迅速发展,Web应用日益广泛,Java语言也得到了迅速发展。1994年,Gosling

equals方法

重写equals方法 1、equals方法和== ?对于基础类型而言,“==”比较的是基础类型的值。对于对象而言,“==”比较的是引用,即对象的内存地址。 ?equals()方法在Object基类中,其内部使用“==”实现的。在很多类中重写了equals方法,因此很多类中重写了该方法用于实现对象相等。比如:string 类等。 2、什么时候需要重写equals方法 第一种情况:如果类中提供的equals方法无法满足需求,则需要重写equals方法。 第二种情况:对于采用哈希算法的集合,集合中对象必须重写hashCode方法,同时也要重写equals方法。注意在重写equals方法的时候,函数的返回值、参数类型和参数个数必须相同,类的权限访问可以不同,但是子类重写父类的方法时,访问控制权限必须大于父类。 比如:public boolean equals(Object o)与public boolean equals(String o),构成不了重写,构成的只是重载。假如父类有方法private boolean equals(Object 0),子类这样重写public boolean equals(Object 0),可以构成重写。 3、对象相等的含义:对象的类型相同,对象的某个属性相同(如果重写该方法需要自己去决定哪个属性相同)。 对象相等的判断: ?equals(参数)函数中的参数不能为空,需要进行判断。 ?判断两个对象的类类型是否相同。两种方式:第一种判断对象的类字节码是否相同;第二种使用instanceof关键字,判断左边的对象是否为右边类的实例对象。 ?根据自己的需求决定哪个属性相同。 示例一:重写equals方法 private String username; private String password; private String gender; private int age; 方法 public User(String username,String password,String gender,int age) {} public void setUsername(String username) {} public void setPassword(String password) {} public void setGender(String gender) {} public void setAge(int age) {} public String getUsername() {} public String getPassword() {} public String getGender() {} public int getAge() {}

JAVA技术--Java基础知识常见考试题JAVA技术.doc

一、单选题 1.对类:(B) public class Test( //...do something } 下面那个正确地定义了类Test的构造函数。 A)public void Test() () B)publicTest()(} C ) public static Test() (} D) publicTest(); 2.下面哪个函数是public void example()(...)的重载函数。(A) A)public void example( float f)(...) B)public int example() (...) C)public void example2()(...} D)public int example_overLoad ()(...) 3.下面的代码段中,执行之后i和j的值是_C_。 int i = 1; intj; j = i++; A)1, 1 B) 1,2 C) 2, 1 D) 2,2 4.以下for循环的执行次数是_B o for(int x=0,y=0;(y !=0)&&(x<4) ;x++); A)无限次B) 一次也不执行 C)执行4次D)执行3次 5.下面程序的输出结果是—C o public class People( String name; int id; public People( String str, int n )( name = str; id = n; } public String toString(){ return id + " :” + name; } public String print()(

Java常用类和方法面试题+答案

2015年12月20日18:25:21 Java常用类和方法重点总结 作者:数据分析玩家 1、简述Java中内存分配的问题 1>凡是new()出来的东西,都是在堆中进行分配的 2>局部变量【数据类型+变量名】都是在栈中进行分配的 3>静态变量【static】和字符串常量【“String”】都是在数据区进行分配的 4>方法【代码】都是在代码区进行存放的 2、简述Java中Object类的地位 1>Java中所有的类【自己定义的类以及Sun公司提供的类】都默认自动继承了Object类 2>Java中所有的类都从Object类中继承了toString()方法、hashCode()方法和equals()等方法 3、简述Object类中toString()方法的注意事项 1>toString()方法的返回值是一个字符串 2>toString()方法返回的是类的名字和该对象的哈希码组 成的一个字符串,即toString()方法返回的是该对象的字符串表示形式 3>在Java中System.out.println(类对象名)实际输出的是该对象的toString()方法返回的字符串,即括号中的内容等价于类对象名.toString(),toString方法的好处是在碰到

println方法的时候会被自动调用,不用显示的写出来 4>建议所有的子类都重写从Object类中继承过来toString 方法,否则toString方法的返回值没有什么实际含义 4、简述Object类中equals()方法的注意事项 1>equals方法的返回值为true或false 2>Object类中equals方法只有在两个对象是同一块内存区域时,即不但内容相同、地址还必须相同时才返回true,否则即便内容相同、如果地址不同只会返回false 3>重写Object类中的equals方法目的在于:保证只要两个对象的内容相同,equals方法就返回true 5、简述Object类中hashCode()方法的注意事项 1>哈希码原本指的是内存空间地址的十六进制表示形式 2>hashCode()方法返回的是该对象的哈希码、即该对象的真实内存地址的十六进制表示形式,但是重写完hashCode()方法之后,返回的不再是该对象真实内存地址的十六进制表示形式 6、学习Java中toString方法、equals方法、hashCode方法共同的一个注意事项 在Java中,凡是动态分配的内存都是没有名字的,而是将其地址赋给一个指针变量【引用】,用指针变量去代表这个事物,所以引用和动态分配的内存有本质上的区别,但是在学习Java中的toString方法、equals方法和hashCode方

Java类与对象实验报告

实验报告 一、实验项目:类与对象 二、实验目的: 1. 学会使用类来封装对象的属性和功能 2. 掌握类变量与实例变量,以及类方法与实例方法的区别 3. 掌握使用package和import语 三、实验器材:计算机、Java编程软件JCreator 四、实验原理(或仪器装置图): 1. 类与对象 类是组成Java程序的基本要素。类封装了一类对象的状态和方法。类是用来定义对象的模板。 类声明 class 类名{ 类体 } 对象的声明 一般格式为: 类的名字对象名字; 定义对象引用后,用new运算符完成对象的创建工作,分配存储空间,并对其初始化。 变量名=new 类名([构造方法实参表]); 对象的使用 访问成员的基本语法形式如下:

对象名.变量成员名 对象名.方法成员名([实际参数表]) 2.成员变量和局部变量 成员变量格式:[修饰符] 变量类型变量名[=初值]; 成员方法: 格式:[修饰符] 返回值的数据类型方法名(参数1,参数2,…) { 语句序列; return[表达式]; } 类中定义的变量是成员变量,而方法中定义的变量是局部变量。 3. 构造方法 构造方法是一种特殊的方法,创建对象时被自动调用。与一般的方法不同,它没有返回值类型的说明,方法体中也不可以用return语句带回返回值。构造方法的方法名与类名相同在构造方法中可以通过this关键字调用该类中其他的构造方法。 4.包 包是Java语言中有效地管理类的一个机制。 ①通过关键字package声明包语句。package 语句作为Java源文件的第一条语句,指 明该源文件定义的类所在的包。package语句的一般格式为:package 包名; ②import 语句:使用import 语句可以引入包中的类。 五、实验步骤及数据记录: 1.定义一个圆柱体类Cylinder,并创建相应的对象,然后计算圆柱体的底面积与体积。

JAVA中常用类的常用方法

JAVA中常用类的常用方法 一、https://www.doczj.com/doc/a14947298.html,ng.Object类 1、clone()方法 创建并返回此对象的一个副本。要进行“克隆”的对象所属的类必须实现https://www.doczj.com/doc/a14947298.html,ng. Cloneable接口。 2、equals(Object obj)方法 ?功能:比较引用类型数据的等价性。 ?等价标准:引用类型比较引用,基本类型比较值。 ?存在特例:对、Date及封装类等类型来说,是比较类型及对象的内容而不考虑引用的是否为同一实例。 3、finalize()方法 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 4、hashCode()方法返回该对象的哈希码值。 5、notify()方法唤醒在此对象监视器上等待的单个线程。 6、notifyAll()方法唤醒在此对象监视器上等待的所有线程。 7、toString()方法 返回该对象的字符串表示。在进行String与其它类型数据的连接操作时,自动调用toString()方法。可以根据需要重写toString()方法。 8、wait()方法 在其他线程调用此对象的notify() 方法或notifyAll() 方法前,导致当前线程等待。 二、字符串相关类 l String类 charAt(int index) 返回指定索引处的char 值。 compareTo(String anotherString) 按字典顺序比较两个字符串。 compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 concat(String str) 将指定字符串连接到此字符串的结尾。 endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 equals(Object anObject) 将此字符串与指定的对象比较。 equalsIgnoreCase(String anotherString) 将此String 与另一个String 比较,不考虑大小写。indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 indexOf(String str) 返回第一次出现的指定子字符串在此字符串中的索引。 lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 length() 返回此字符串的长度。 replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用newChar 替换此字符串中出现的所有oldChar 得到的。split(String regex) 根据给定正则表达式的匹配拆分此字符串。 startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。 substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。该子字符串从指定的beginIndex 处开

Java中判断对象是否相等的equals()方法使用教程资料

Java中判断对象是否相等的equals()方法使用教程 与==运算符响应,equals()方法也是Java中对对象进行比较的一大方式,要特别注意二者的不同点,这个我们在下文中即将讲到,接下来我们就来看一下Java中判断对象是否相等的equals()方法使用教程 Object类中的equals方法用于检测一个对象是否等于另一个对象。在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的。从这点上看,将其作为默认操作也是合乎情理的。然而,对于多数类类说,这种判断并没有什么意义,例如,采用这种方式比较两个PrintStream是否相等就完全没有意义。然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的。所以一般在自定义类中都要重写equals比较。 下面给出编写一个完美equals()方法的建议: (1)显式参数命名为otherObject,稍后需要将转换成一个叫other的变量 这条语句只是一个优化。实际上,这是一种经常采用的形式。因为计算这个等式要比一个一个地比较类中的域所付出的代价小的多。 otherObject是否为null,如果为null,返回false。这项检测是很必要的。 (3)检测 如果equals的语义在每个子类中有所改变, 检测 比较基本类型域,使用equals比较对 == 如果在子类中重新定义equals,就要在其中包含调用super.equals(other)。如果检测失败,就不可能相等。如果超类中的域相等,就比较子类中的实例域。 对于数组类型的域,可以使用静态的Arrays.equals方法检测相应的元素是否相等。 来看几个字符串比较例子:

如果重写了对象的equals()方法,需要考虑什么

如果重写了对象的equals()方法,需要考 虑什么 1、用ibatis的原因 2、jdbc、hibernate、ibatis的区别 3、ibatis 的核心配置文件 4、ibatis的核心类 1、在myeclipse加入hibernate环境的全过程是什么? 2、hibernate的核心配置文件是什么及其作用? 3、hibernate的核心类是什么,它们的相互关系是什么?重要的方法是什么? 4、关联: 5、hibernate中的one-to-many或many-to-one中常用的方式是什么? 6、Criteria 的 1、JDBC如何做事务处理? 2、写出几个在Jdbc中常用的接口 3、简述你对Statement,PreparedStatement,CallableStatement 的理解 4、Java中访问数据库的步骤? 5、JDBC中的核心类及其作用是什么? 6、执行存储过程用那一个类,如何操作输出参数?(操作) 8、可能会让 1.列举出10个JAVA语言的优势 2.列举出JAVA中10个面向对象编程的术语 3.列举出JAVA中6个比较常用的包 4.JAVA中的标识符有什么作用和特点 5.JAVA中的关键字有什么特点,列举出至少20个关键字 6.JAVA中数据类型如何分类? 7.JAVA中运算符的分类及举例 8.super,th 1、java中有几种类型的流?JDK为每种类型的流提供了一些抽

象类以供继承,请说出他们分别是哪些类?2、启动一个线程是用run()还是start()? 3、线程的基本概念、线程的基本状态以及状态之间的关系4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什 1. super()与this()的区别? 2. 作用域public,protected,private,以及不写时的区别? 3. 编程输出如下图形。 4. JAVA的事件委托机制和垃圾回收机制 5. 在JAVA中,如何跳出当前的多重嵌套循环? 6. 什么是java序列化,如何实现java 序列化?(写一个实例) 7. 一

JavaSE知识点总结(个人整理)

2. 面向对象的理解 面向对象是Java的基本特征,是软件开发过程使用的基于面向过程一种思维方式,将功能封装进对象,强调具备功能的对象和调用结果,不关注具体实现这个功能的过 程。 面向对象特点:是一种更符合人们思考习惯的思想,可以将复杂的事情简单化,将程 序由执行者转换成为指挥者。 面向对象特性:封装,继承,多态 封装:封装是把数据和方法包装进类中,隐藏其具体实现细节,对外提供公共访问方法。封装的结果是一个同时带有特征和行为的数据类型。(安全性,复用性) 继承:当一个类的属性与行为均与现有类相似,属于现有类的一种时,这一个类可以 定义为现有类的子类。或者,当多个类具有相同的属性和行为,我们可以抽取出共性 的内容定义父类,再创建相似的”兄弟”类时只要继承父类即可。当子类继承父类后,拥有了父类非私有的方法并可以直接调用。如果认为父类提供的方法不够强大,子类 可以按照子类自身的逻辑重写继承过来的父类方法。(复用性,可维护性,多态前 提) 多态:继承是多态的前提,多态是指一种事物具有多种形态,比如猫具有猫类的形 态,也具有动物的形态,多态的具体表现是父类引用指向子类对象,父类的引用也可 以接收自己子类的对象。(可维护性,扩展性) 面试:跟我谈谈什么是面向对象 1 面向对象是基于面向过程的 2 什么是面向过程什么是面向对象 3 面向对象的特点 3. 面向对象和面向过程的区别 面向过程强调的是功能行为,分析解决问题所需的步骤,以函数为基础,完成各种步 骤的操作和实现。 面向对象是基于面向过程的,将功能封装成对象,强调的是具备了这些功能的对象, 让对象去调用方法来解决问题。 面向对象举例

类的设计与封装(一)实验报告

浙江大学城市学院实验报告课程名称面向对象程序设计 实验项目名称类的设计与封装实验(一) 学生姓名专业班级学号 一. 实验目的和要求 1.掌握使用类将对象的属性与功能封装在类中的特点 2.掌握实例方法与构造方法 二. 实验内容 1. 分析Time类的设计 2. 分析并设计Product类 3. 分析并设计Fraction类 4. 设计Rectangle类 5. 设计Student类及其测试类School类 三. 实验结果与分析(可将程序运行结果截屏,也可分析运行结果) 1. 阅读以下关于Time类的代码,分析程序并回答相关的问题 import java.text.DecimalFormat; public class Time{ private int hour; private int minute; private int second; Time(){hour=0;minute=0;second=0;} Time(int h){ hour=h;minute=0;second=0;} Time(int h,int m){hour=h;minute=m;second=0;} Time(int h,int m,int s){hour=h;minute=m;second=s;} Time(Time time){ this.hour=time.getHour(); this.minute=time.getMinute(); this.second=time.getSecond(); } public int getHour(){return hour;} public int getMinute(){ return minute;}

常用java技巧总结

面向对象的思想特点 A:是一种更符合我们思想习惯的思想 B:可以将复杂的事情简单化 C:将我们从执行者变成了指挥者 面向对象: 我们怎么才能更符合面向对象思想呢? A:有哪些类呢? B:每个类有哪些东西呢? C:类与类直接的关系是什么呢? 开发,设计,特征 面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情。 面向对象设计 其实就是在管理和维护对象之间的关系。 面向对象特征 封装(encapsulation) 继承(inheritance) 多态(polymorphism) 继承:把多个类中相同的成员给提取出来定义到一个独立的类中。然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些内容。这个关系叫继承。 继承的好处: A:提高了代码的复用性 B:提高了代码的维护性 C:让类与类产生了一个关系,是多态的前提 继承的弊端: A:让类的耦合性增强。这样某个类的改变,就会影响其他和该类相关的类。 原则:低耦合,高内聚。 耦合:类与类的关系 内聚:自己完成某件事情的能力 B:打破了封装性 Java中继承的特点 A:Java中类只支持单继承 B:Java中可以多层(重)继承(继承体系) 继承的注意事项: A:子类不能继承父类的私有成员 B:子类不能继承父类的构造方法,但是可以通过super去访问 C:不要为了部分功能而去继承

多态:同一个对象在不同时刻体现出来的不同状态。 多态前提: A:有继承或者实现关系。 B:有方法重写。 C:有父类或者父接口引用指向子类对象。 多态中的成员访问特点 A:成员变量 编译看左边,运行看左边 B:构造方法 子类的构造都会默认访问父类构造 C:成员方法 编译看左边,运行看右边 D:静态方法 编译看左边,运行看左边 多态的好处 提高了程序的维护性(由继承保证) 提高了程序的扩展性(由多态保证) 多态的弊端 不能访问子类特有功能 静态的特点: A:随着类的加载而加载 B:优先与对象存在 C:被类的所有对象共享 这其实也是我们判断该不该使用静态的依据。 D:可以通过类名调用 静态变量和成员变量的区别 A:所属不同 静态变量:属于类,类变量 成员变量:属于对象,对象变量,实例变量 B:内存位置不同 静态变量:方法区的静态区 成员变量:堆内存 C:生命周期不同 静态变量:静态变量是随着类的加载而加载,随着类的消失而消失 成员变量:成员变量是随着对象的创建而存在,随着对象的消失而消失D:调用不同 静态变量:可以通过对象名调用,也可以通过类名调用 成员变量:只能通过对象名调用

java上机实验报告(完整高分打印版)

Java语言程序设计实验报告 学生所在学院:里仁学院 学生所在班级:08计算机一班 学生姓名:hejinhai 指导教师:崔勇强 教务处

2010年6月 第1篇核心基础篇 实验一 第3章Java语言基础 3.2 表达式与语句 3.2.2 运算符与表达式 9 Java强制类型转换 一,实验目的: 掌握和理解强制类型转换原理格式及使用方法。 二,实验内容: 编写程序定义整形变量x,把他强制类型转换成byte类型,观察输出结果。 三,源程序: public class Test { public static void main(String[] args) { int x=1200; byte b=(byte)x;

System.out.println("转换结果是:"+b); } } 输出结果:-80 四,原理: 根据低级数据和高级数据的相互转换规则,把输入的整形数1200转换成二进制数,转换成补码形式取前八位,输出结果。 实验二 第3章Java语言基础 3.2 表达式与语句 3.2.2 运算符与表达式 4 位运算符 一,实验目的: 理解和掌握移位运算符操作,使用方法,和格式。 二,实验内容: 编写程序,定义两个整型变量,采用左移右移运算符 >> ,<<,和不带符号右移运算符 >>>,对整型变量进行移位运算,输出

结果,观察结果。 三,源程序: public class Test { public static void main(String[] args) { int s1=1357;int s2=-1357; int s3=s1>>5;int s4=s2>>5; int s5=s1>>>5;int s6=s2>>>5; int s7=s1<<5;int s8=s2<<5; int s9=s1>>37;int s10=s2>>37; System.out.println("数字一是"+s1); System.out.println("数字二是"+s2); System.out.println("数字一的<<左移五位结果是"+s7); System.out.println("数字一的>>右移五位结果是"+s3); System.out.println("数字一的>>>右移五位结果是"+s5); System.out.println("数字二的<<左移五位结果是"+s8); System.out.println("数字二的>>右移五位结果是"+s4); System.out.println("数字二的>>>右移五位结果是"+s6);

java常用类知识点总结

java常用类知识点总结 Java常用类 要求: 1、掌握String和StringBuffer的区别,可以熟练使用String和StringBuffer的各 种方法进行相关操作。 2、能够自己编写一个得到日期的操作类,并将日期进行格式化操作。 3、掌握比较器及其基本原理,并可以通过比较器进行对象数组的比较操作。 4、掌握对象克隆技术及其实现 5、能够灵活应用正则表达式对字符串的组成进行判断 6、掌握Math、Random、基本数据类型的包装类的使用 7、描述出Object System对垃圾收集的支持 8、使用NumberFormat、DecimalFormat、BigInteger、BigDecimal进行数字的操 作 String和StringBuffer String的内容一旦声明不可改变,如果要改变,改变的是String的引用地址,如果一个字符串要经常改变,必须使用StringBuffer。 在一个字符串内容需要频繁修改时,使用StringBuffer可以提升操作性能,因为StringBuffer内容可以改变,而String内容不可改变。StringBuffer支持的方法大部分与String类似。 StringBuffer常见用法: (1) 字符串的连接操作

String类可以通过“+“进行字符串的连接,而StringBuffer中却只能使用append方法进行字符串的连接,而且此方法返回一个StringBuffer类的实例,这样就可以采用代码链的形式一直调用append方法。 (2) 在任意位置处为StringBuffer添加内容 可以使用insert方法在指定位置上为StringBuffer添加内容 字符串的反转操作(较为常见的操作,使用reverse方法) (3) 替换指定范围的内容 replace方法可对指定范围的内容进行替换。在String中如果要替换,使用的是replaceAll (4) 字符串截取(使用subString方法从指定范围中截取内容) (5) 删除指定范围的字符串(使用delete方法删除指定范围内容) (6) 查找指定内容是否存在(indexOf查找指定内容,查找到返回内容的位置, 没查到返回-1) 问题:(1)String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有, 没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。在这段代码中,s原先指向一个String对象,内容是 "Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢,答案是没有。这时,s不指向原来那个对象了,而指向了另一个 String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改, 或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为 String对象建立之后不能再改变,所以对于每一个不同的字符

Java期末知识点整理总结

Java期末知识点整理总结 计科2班苏锐师编号47 学号201330551464 第一章 Java语言概述 1. Java语言发展历史和现状及前景 2. Java语言的特点: 简单、面向对象、分布式、健壮性、结构中立、 安全性、可移植、解释的、高性能、多线程、多态性 3. Java虚拟机概念(JVM),Java程序的执行过程 4. Java应用程序分类:Application和Applet 5. Java程序的开发环境:JDK,IDE 第二章 Java数据类型及其运算 1. 标识符与保留字 1.2 标识符命名语法规则与Java推荐的标识符命名规则 1.3 Java中的关键字 2. 数据类型byte, short, int long, char, float, double, boolean 注意点:Java中所有数据类型是确定的,与平台无关,没有sizeof操作,其中特别注意char 类型是2字节Unicode编码,与C++ 不同;知道基本类型都有对应的默认值。 整型数的十进制、八进制、十六进制值的表示。 实型数的十进制、十六进制与科学计数法表示,注意实型常量默认类型为double型。 3. 运算符与表达式算术运算符: + - * / % ++ -- 关系运算符:> >= < <= == != 逻辑运算符:&& || !& | 注意短路计算与非短路计算的差别 位运算符: >> << >>> & | ^ ~ 要认识异或(^)与按位取反(~)运算符 赋值运算符: += -= *= /= %= &= |= ^= <<= >>= >>>= 要注意赋值运算符中包含了强制转换: 若: int k = 1; k += 44.232D; 则相当于: k = (int) ( k + 44.232D); 条件运算符:exp ?stat1 :stat2 要注意stat1与stat2要求类型相兼容且不能为void类型。运算符的优先级:算术运算 > 关系运算> 逻辑运算

相关主题
文本预览
相关文档 最新文档