从头认识java-2.3 自增自减与关系操作符

这一章节我们来聊聊自增自减与关系操作符。

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需要注意的地方。

这一章节就到这里,谢谢。

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

目录

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 03:24:59

从头认识java-2.3 自增自减与关系操作符的相关文章

[Java]#从头学Java# Java大整数相加

重操旧业,再温Java,写了个大整数相乘先回顾回顾基本知识.算法.效率什么的都没怎么考虑,就纯粹实现功能而已. 先上代码: 1 package com.tacyeh.common; 2 3 public class MyMath { 4 5 public static String BigNumSum(String... n) { 6 int length = n.length; 7 StringBuilder result = new StringBuilder(); 8 //这里判断其实不需

Java连接MySQL数据库增删改查通用方法

Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类下面写好多方法,要是多个数据库,就要写多个类多个方法,导致代码编写太过于繁琐,所以为了改变这样的繁琐,我将连接数据库的方法进行了一系列的封装,使用户传入一个对象值Object就可以得到想要的. 我在之前写过一篇普通的Java连接MySQL数据库,大家可以看看,以便对比参考之后就知道差距了  数据库--MySQL-->Java篇 接下来我给大家讲讲如何将

Java中的自增操作符与中间缓存变量机制

转自:http://blog.csdn.net/maggiedorami/article/details/7986098 我们来看这样一段程序: public static void main(String[] args){ int i, sum1, sum2; i=0; sum1 = (i++)+(i++); System.out.println("sum1="+sum1); i = 0; sum2 = (++i)+(++i); System.out.println("su

java中自增自减运算与c中自增自减的区别

今天看到java面试宝典里面有一道题目是这样的: 答案是0,我开始也有疑问,后来看到后面说到java的中间缓存变量,后来到网上查了查,终于理解了,是什么意思了.请看下面的代码和解释: package com.wj.demo; public class Test1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int j=0; for(int i=

MySQL---数据库从入门走上大神系列(二)-用Java对MySQL进行增删改查

上节已经学会对MySQL进行简单的增删改查了,那么,我们如何实现用Java来对数据库操作增删改呢. 本节将用Java演示对MySQL进行增删改查. 简单的来说,分为4个步骤: 1.加载连接器(驱动)   通过Driver类 (最好用类反射来加载,更加灵活) 2.建立与数据库的连接 3.获取语句对象 4.对数据库进行操作(增删改查) 其实第一步现在可以不用写了,高版本的MySQL已经在内部帮我们写好了第一步,但是,为了兼容性更好(兼容低版本的MySQL)我们最好还是写上第一步. 我们先看一下原数据

Java后缀自增/自减表达式的返回值

Java后缀自增/自减表达式的返回值 今天看到一段代码,描述循环k次 while(k-- > 0){ //... } 直觉上认为是错的,k--后值变成了k-1,循环应该只能执行k-1次吧.实际这段代码是正确的.在Java8语言规范15.14.3中有以下描述: The value of the postfix decrement expression is the value of the variable before the new value is stored. 即后缀自减表达式的值为存储

java自增自减运算符

除了这+ - * / % 这5个算术运算符之外其实还有2种 ++ - - 这两个也可以属于算术运算符.他是自增自减运算的,例如:int i = 10; i++; i- - 或 ++i - -i但是这2个比较特殊,他有先运算和后运算一说.++ - -符号在后面的为后运算,++ - -符号在前面的为先运算例如:i++ i- - 这为后运算,++i - -i这为先运算. ++ - - 他是一个缩写的方式,融合了2句代码的缩写. 例如:int i = 100; int a = i; i = i+1; 意

PHP的自增自减操作

PHP的变量可以存放任意类型的值.对变量执行自增自减操作时,其值的类型范围广,不仅限于数值类型.Perl等弱类型的语言均有此特征.而Java等变量值严格区分类型的语言,此种操作则仅限于数值类型值. 当字符串中有数值的各进制标识符(0x.0b等).科学记数法的标识符(E)时,会有特例,需要加以注意. 递增/递减运算符不影响布尔值.递减NULL值也没有效果,但是递增NULL的结果是1.在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的. $a = TRUE;var_dump(

黑马程序员————C语言基础语法二(算数运算、赋值运算符、自增自减、sizeof、关系运算、逻辑运算、三目运算符、选择结构、循环结构)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 第一讲  算数运算 C语言一共有34种运算符,包括了常见的加减乘除运算 1.加法运算+ 除开能做加法运算,还能表示正号:+5.+90 2.减法运算- 除开能做减法运算,还能表示符号:-10.-29 3.乘法运算* 注意符号,不是x,而是* 4.除法运算/ 注意符号,不是÷,也不是\,而是/ 整数除于整数,还是整数.1/2的值是0,这个并不是二分之一 5.取余运算% 什么是取余:两个整数相除之后