这一章节我们来聊聊自增自减与关系操作符。
1.自增自减其实没什么特别需要关注,只要把基础原理弄懂即可。
package com.ray.ch03;
public class Test {
public static void main(String[] args) {
int a = 0;
System.out.println("before ++:" + a);
System.out.println(" ++:" + a++);
System.out.println("after ++:" + a);
System.out.println("--------");
System.out.println("before ++:" + a);
System.out.println(" ++:" + (++a));
System.out.println("after ++:" + a);
System.out.println("--------");
System.out.println("before --:" + a);
System.out.println(" --:" + a--);
System.out.println("after --:" + a);
System.out.println("--------");
System.out.println("before --:" + a);
System.out.println(" --:" + --a);
System.out.println("after --:" + a);
}
}
输出:
before ++:0
++:0
after ++:1
--------
before ++:1
++:2
after ++:2
--------
before --:2
--:2
after --:1
--------
before --:1
--:0
after --:0
从代码以及输出,我们可以看见a在每个阶段的变化,只要大家弄明白这个即可。
2.关系操作符
其实就是>,<,=,!=等
(1)对象的等价性
package com.ray.ch03;
public class Test {
public static void main(String[] args) {
Dog jack = new Dog();
Dog rose = new Dog();
System.out.println(jack == rose);
System.out.println(jack.equals(rose));
Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b);
System.out.println(a.equals(b));
Integer d = new Integer(100000);
Integer e = new Integer(100000);
System.out.println(d == e);
System.out.println(d.equals(e));
int f = 1;
int g = 1;
System.out.println(f == g);
// System.out.println(f.equals(g));//报错
}
}
class Dog {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
输出:
false
false
false
true
false
true
true
Dog那里的对比就不说了,我们重点说说Integer那里的几个对比。
==一般是对比对象的引用,一次a==b,d==e返回false,而使用equals,则是对比两个对象里面的值,因为在Integer里面已经重写了equals方法。
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
他对比的是数值,而不是对象的引用,而在==使用的是Object的equals
public boolean equals(Object obj) {
return (this == obj);
}
他只对比两者的引用是否指向同一个对象。
有一点需要注意:基本类型不能使用equals
我们再看下面的两个例子:
package com.ray.ch03;
public class Test {
public static void main(String[] args) {
Dog jack = new Dog();
Dog rose = new Dog();
jack.setName("100");
rose.setName("100");
System.out.println(jack == rose);
System.out.println(jack.equals(rose));
}
}
class Dog {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
输出:
false
false
虽然两个对象都设置同样的值,但是他们使用的是Object的equals,只是对比引用,所以同时返回false,我们修改一下上面的代码。
package com.ray.ch03;
public class Test {
public static void main(String[] args) {
Dog jack = new Dog();
Dog rose = new Dog();
jack.setName("100");
rose.setName("100");
System.out.println(jack == rose);
System.out.println(jack.equals(rose));
}
}
class Dog {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Dog) {
return ((Dog) obj).getName().equals(name);
}
return super.equals(obj);
}
}
输出:
false
true
我们自己重写了equals方法,方法里面只是对比两者的名称,因此返回的是false和true。
总结:这一章节简单介绍了自增自减和关系操作符,以及==和equals需要注意的地方。
这一章节就到这里,谢谢。
-----------------------------------
目录
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
从头写React-like框架的工程搭建实现 最近在网上看到了 Build your own React 这篇文章,作者从零开始实现了一个简易类 React 框架,虽然没有过多的优化,但 React 中的核心思想 Concurrent Mode,Fiber ...
本资料是UCSF DOCK的使用案例分享的输入资料,将使用DOCK 6.11自带的片段库,使用DOCK/RDKit的 DOCK_D3N功能从头设计分子。便于使用者直接从这部分设计工作开始,不需花时间来准备输入文件。
引导自己从头开始编写一个操作系统, 一本自学的书
从头开始学习Java课程-资料来源PillsInformática。
Java-3D游戏引擎与基本游戏Java中使用LWJGL,OpenGL,OpenAL等的3D游戏引擎。 从头开始
外卖订餐java源码 你会学到什么 通过 Java 片段的构建块,您将能够立即了解 Java 编程的要点。 你需要什么 勇敢地浏览存储库! 或替代开源 JDK 1.8 版本 截至今天,该存储库已通过测试 Oracle JDK 1.8 OpenJDK 1.8 ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
视频 https://www.bilibili.com/video/BV1914y1s7hi
赖世雄英语从头学 下载-附件资源
军工行业2021年度投资策略:而今迈步从头越-20201115-招商证券.pdf
java 源码剖析 Java-Review 说明 这个仓库的建立的原因就是为了在 java 的复习过程中,从源码的角度去认真的钻研一下其内部的原理。 所有的分析和总结都在本人的博客上,希望和大家...操作符 关键字 String 多态 容器
中文名: JAVA WEB服务 构建与运行 原名: Java Web Services:Up and Running 作者: Martin Kalin译者: 任增刚图书分类: 软件 资源格式: PDF 版本: 扫描版 出版社: O'Reilly书号: ISBN: 9787121097119发行时间: 2009年...
java实现验证码功能源码 Java Periphery 是一个高性能库,用于用户空间 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外设 I/O 接口访问。 我没有尝试从头开始构建它并生成 JNI 包装器。 这节省了大量手动编码...
乙二醇2020年度策略报告:“熊”关漫道真如铁,而今迈步从头越-20191230-光大期货-36页.rar
Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程下载和断点续传功能,同时确保线程安全。该项目的主要特点如下: 1. 多线程下载:项目采用了Java的...
此资源是个人学习时的遗留物》 有点案例可能不详细,仅为参考。 学习交流使用
开发人员零java-Mentorama 在此存储库中,将从头开始插入Java Developer模块的Mentorama课程期间开发的所有练习。
3D游戏从头编-网上收集,很基础. 第一回:开发环境 第二回:3D基本概念 第三回:第一个D3D程序 第四回:渲染顶点 第五回:渲染索引顶点 第六回:摄象机 第七回:灯光 第八回:纹理 第九回:3D模型(.x)
Java-TCP-GUI-聊天 介绍 作为我的理学学士学位的交流课程的一个项目,我被要求制作一个聊天应用程序。 我完全是从头开始制作此程序的,没有从其他来源复制任何功能。 我知道代码不是很完美,但是在我还承担其他学术...
java源码字符串缓冲区 这是 Java String 、 StringBuilder和StringBuffer方法/API 的完整指南。 本指南的源代码示例在我们的本地开发环境中进行了良好的测试,您可以将这些示例用作无错误。 您可以在 上了解更多信息...