每天JAVA简单教学:简单数据类型、地址比较和值比较

昨天说了布朗运算,今天详细解释一下其中的==运算符和Object的equals方法。

首先,在说这些之前,我们来补充说明一下JAVA的数据类型。在JAVA里面,有2种数据类型,第一种叫primitive(简单数据类型),另一种是Object.

简单数据类型的特点是:
1)类名是关键字
2)没有包名,没有方法可以访问,不是Object的子类

可以看出,这类数据是常用的数据,而且为了节省空间,它们没有继承Object,去除类多于的方法,节省了内存空间。

常用的简单数据类型包括:
int,long,short,double,float,byte,char,boolean,void
关于其可存储的数值范围大家可以去网上搜索

需要特别说明的是,void只适用于定义函数返回类型,不能用于运算。

为什么会提及简单类型运算呢?因为要说明==运算符和equals方法,会涉及到它们。

我们首先看看以下代码:

package operator;

public class EqualComparation
{
public static void main(String[] args)
{
int a=1;
int b=1;
System.out.println(a == b);
}
}


相信大家可以马上回答上面的输出结果是true
接下来,我们可以看看JDK1.5的新特性:简单数据类型和对象类型数据的比较:

package operator;

public class EqualComparation
{
public static void main(String[] args)
{
Integer a=1;
int b=1;
System.out.println(a == b);
}
}


上面的结果也是true哦,因为jdk1.5很只能的能把基础数据类型转换为对应的对象,然后再进行值比较。

为了更好地让大家了解这个改进,我来演示以下上述的代码在1.4时代要怎么实现:

package operator;

public class EqualComparationForJDK14
{
public static void main(String[] args)
{
Integer a= Integer.valueOf(1);
int b=1;
System.out.println(a.equals(Integer.valueOf(b)));
}
}


简单类型在以前一定要先转换为对象才可以和对象比较哦,当然你把对象转换为简单类型比较更加保险。

为什么?因为以下对象之间的比较使用==和equals方法往往是不一样的。

equals方法,是Object的一个public方法,用于对比两个对象之间的[b]值[/b]的异同。那它和==比较有什么不同呢?当==用于对象之间的比较时,类似于C的===,比较的是两个对象的[b]hashCode[/b]。而这个hashCode是由存储对象的地址位得来的,为了保证每个对象的唯一性。在Object里面我们可以通过hashCode()来查看当前实例的hashCode代码。

来看看Object.equals(Object)代码:

public boolean equals(Object obj) {
return (this == obj);
}


然后它的说明里面已经说明了这个方法是对比两个对象的hashCode返回的值。理论上,每个new出来的Object之间的hashCode是不一样的:

package object;

public class HashCodeDemo
{
public static void main(String[] args)
{
Object a = new Object();
Object b = new Object();
System.out.println(a.hashCode());
System.out.println(b.hashCode());
}
}


你可以看到这个例子里面,两个hashCode是不一样的。

所以,对于对象值的比较,我们建议大家调用equals方法,并且如果你的类如果涉及到对比运算的话,也最好重写这个方法,实现你的比较逻辑。

让我们最后来看看Integer.equals(Object)方法

public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}


所以,如果我们直接用==对比两个Integer类,实际上会去对比两个实例的hashCode,而且调用的不是Integer类本身的hashCode,而是Object父类的hashCode。可以看看下面的两端代码:

首先是Integer的hashCode方法

public int hashCode() {
return value;
}


这个value就是Integer保存的int值,这个理论上来说,会使以下的代码显示true:

Integer a =1;
System.out.println(a.hashCode());
System.out.println(new Integer(1).hashCode());
System.out.println(a == new Integer(1));


但是实际上我们发现了,实际最后的结果是false。而且从第一行和第二行显示的内容可以知道a.hashCode()和new Integer(1).hashCode()都是1。

所以我们就清楚了以下几点:
1)==用于进行简单数据类型之间的比较
2)==用于比较两个对象是否同一实例
3).equals方法用于比较两个对象的值,我们可以根据实际需要重写特定对象的equals()方法以实现同类对象之间的特定比较逻辑。

今天到此为止,明天谈谈类型强转。
<think>嗯,用户想为一个零基础的大学生制定一个四天的Java学习计划,目标是快速掌握JavaSE的基础知识并达到高效编码的水平。首先,我需要考虑用户的需求。四天时间非常紧张,所以必须高效安排内容,不能覆盖太多细节。零基础的话,得从最基础的概念开始,比如安装开发环境、语法基础,然后逐步深入到面向对象、核心类库简单项目实战。 用户提到推荐教材B站的教学视频资源。根据引用[1][2],推荐《Java核心技术卷1》作为教材,因为这本书适合入门,能够帮助建立知识体系。视频方面,尚硅谷宋红康老师的课程比较适合,0基础起步,有大量练习,这对新手来说很重要。需要结合教材视频,但以书本为主,视频辅助理解,这样能建立系统的框架。 接下来分四天的计划。第一天应该安装环境,学习基础语法,比如变量、数据类型、流程控制。引用[2]提到使用EclipseIDEA,所以可能需要教学生安装IDEA,因为现在更常用。然后第二天进入面向对象,类、对象、继承、多态这些概念,这部分是Java的核心,必须打好基础。第三天是核心类库,比如集合、IO、异常处理,这些是实际编码中常用的,学生需要熟悉API的使用。最后一天做综合练习项目实战,比如学生管理系统,这样可以整合之前的知识,提高应用能力。 需要注意每天的时间安排,每天6小时,分成三个部分,保持节奏紧凑但不过载。教材视频资源要穿插使用,比如先看视频快速入门,然后看书巩固,再做练习。引用[3]提到的JVM知识可能在四天内无法深入,所以可以简要提及,作为扩展内容。 可能用户没有明确说出来的需求是希望计划有可行性,不会因为内容太多而放弃。所以需要平衡深度广度,确保每天的内容能够完成,并且有实践环节来巩固。同时,提供相关的问题,帮助学生在学习过程中自我检查,比如第四天的面试题,可以提前了解常见问题,增强信心。 最后,生成相关问题时要围绕学习计划本身,比如如何调整计划、优化方法、评估效果后续路径,这样用户可以根据反馈调整学习策略。总的来说,四天计划需要结构清晰,重点突出,结合理论实践,充分利用推荐的资源,帮助零基础学生快速入门。</think>### 四天Java学习计划(零基础向) #### 第一天:环境搭建与基础语法 **目标**:安装开发工具,理解变量、数据类型、运算符、流程控制 **教材**: - 《Java核心技术卷1》第3章(基本程序设计结构)[^1] **视频资源**: - 尚硅谷宋红康JavaSE教程Day1(环境配置+HelloWorld)[^2] **实践任务**: 1. 安装IDEA并配置JDK 2. 编写程序实现:输入两个数,输出较大 3. 实现九九乘法表(使用循环结构) #### 第二天:面向对象编程基础 **目标**:掌握类、对象、封装、继承、多态 **教材**: - 《Java核心技术卷1》第4章(对象与类)、第5章(继承)[^1] **视频资源**: - 尚硅谷JavaSE教程Day2-3(类与对象、继承与多态)[^2] **实践任务**: 1. 设计“学生类”包含姓名、年龄属性,并实现封装 2. 创建“大学生类”继承“学生类”,添加专业属性 3. 使用多态实现不同学生类型的自我介绍 #### 第三天:核心类库与异常处理 **目标**:熟悉String、集合框架、IO操作、异常处理机制 **教材**: - 《Java核心技术卷1》第9章(集合)、第11章(异常) **视频资源**: - 尚硅谷JavaSE教程Day4-5(集合框架、异常处理) **实践任务**: 1. 使用ArrayList存储学生对象并实现排序 2. 读写文本文件实现学生信息持久化 3. 自定义异常处理非法年龄输入 #### 第四天:综合练习与项目实战 **目标**:整合知识完成小项目,提升编码效率 **教材**: - 《Java核心技术卷1》第12章(泛型与反射)[^1] **视频资源**: - 尚硅谷JavaSE教程Day6(泛型+项目实战)[^2] **实战项目**: - 学生管理系统(控制台版): ```java // 示例代码框架 public class StudentManager { private List<Student> students = new ArrayList<>(); public void addStudent(Student s) { /*...*/ } public void searchByName(String name) { /*...*/ } } ``` **效率提升技巧**: - 掌握IDEA快捷键(如`psvm`生成main方法) - 使用Debug工具调试程序 - 学习JUnit单元测试基础[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值