`
Scliu123
  • 浏览: 41383 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JDK_实例(java 运算符)

阅读更多
package book.basic;

public class Operator {
	/**
	 * 计算运算符: +; -; *; /;
	 */
	private void computeOperator() {
		int a = 8;
		int b = 5;
		// 对于除法运算,根据基本类型的自动转换规则,当除数和被除数都是整数时,得到的结果也是整数。
		// 因此 8/5得到的是1,而不是1.6
		int f = a / b;
		double g = a / b;
		System.out.println("(f = a / b) = " + f + "; (g = a / b) = " + g);
		// 只要除数和被除数有一个为double或者float,结果就不同了,8/5.0得到是1.6
		double h = a / (b * 1.0d);
		float i = a / (b * 1.0f);
		System.out.println("(h = a / (b * 1.0d)) = " + h + "; (i = a / (b * 1.0f)) = " + i);
	}

	/**
	 * 比较运算符: ==; <; >; !=; <=; >=;
	 */
	private void compareOperator() {
		int a = 5;
		int b = 10;
		System.out.println("(a == b) = " + (a == b)); 
		System.out.println("(a < b) = " + (a < b)); 
		System.out.println("(a > b) = " + (a > b)); 
		System.out.println("(a != b) = " + (a != b)); 
		System.out.println("(a <= b) = " + (a <= b)); 
		System.out.println("(a >= b) = " + (a >= b)); 
		// 判断两个数字是否相等,要用"=="而不是"=",前者是比较运算符,后者是赋值符号
		System.out.println("(a = b) = " + (a = b)); // 10
	}

	/**
	 * 位运算符: &; |; ^; ~; >>; >>>; <<;
	 */
	private void bitOperator() {
		byte a = 23; // "00010111"
		byte b = 26; // "00011010"

		// 按位与, 两个运算数都为1时,结果为1,其余结果为0
		int c = a & b; // "00010010" = 18
		System.out.println("(c = a & b) = " + c);
		// 按位或,两个运算数都为0时,结果为0,其余结果为1
		int d = a | b; // "00011111" = 31
		System.out.println("(d = a | b) = " + d);
		// 按位异或,两个运算数相同时结果为0,不同时结果为1
		int e = a ^ b; // "00001101" = 13
		System.out.println("(e = a ^ b) = " + e);
		// 按位非,0变成1,1变成0
		int f = ~a; // "11101000" = -24,
		// 注意,Java中采用补码存储数字,对于整数,原码与补码一致,
		// 对于负数,符号位不变,将原码取反然后加1,得到补码,补码"11101000"对应的原码是"10011000"即-24
		System.out.println("(f = ~a) = " + f);
		// 右移,左边空出位以符号位填充
		int g = a >> 1;// "00001011" = 11
		System.out.println("(g = a >> 1) = " + g);
		// 右移,左边空出位以0填充
		int h = a >>> 1;// "00001011" = 11
		System.out.println("(h = a >>> 1)" + h);
		// 对负数操作时,>>和>>>得到结果会不一样
		System.out.println("(-24 >> 1) = " + (-24 >> 1) + "\t (-24 >>> 1) = " + (-24 >>> 1));
		// 左移
		int i = a << 1; // "00101110" = 46
		System.out.println("(a << 1) = " + i);

		// 可以发现,右移1位相当于运算数除以2,左移1位相当于运算数乘以2,
		// 实质上,右移n位,相当于运算数除以2的n次方,左移n位,相当于运算数乘以2的n次方,读者可以试验。
		// 在进行乘除法操作时,开发者要有意识的利用这个特点,以提高运算速度。
	}

	/**
	 * 布尔运算符: &&; ||; !; &; |; ^;
	 */
	private void booleanOperator() {
		boolean b1 = true;
		boolean b2 = true;
		boolean b3 = false;

		// &&运算符:对操作数进行与运算,当所有操作数都为true时,结果为true,否则结果为false。
		if (b1 && b2 && b3) {
			System.out.println("变量b1, b2, b3的值都为true");
		} else {
			System.out.println("变量b1, b2, b3中至少有一个的值为false");
		}
		// 注意&&是短路与,意思是:当对操作数的表达式进行从左到右运算时,若遇到有操作数的值为false,则结束运算,将结果置为false。
		int i = 2;
		int j = 0;
		if (b3 && ((j = i) == 2)) {
		}
		System.out.println("j = " + j); 
		if (b1 && ((j = i) == 2)) {
		}
		System.out.println("j = " + j); 

		// ||运算符:对操作数进行或运算,当所有操作数都为false时,结果为false,否则结果为true。
		if (b1 || b2 || b3) {
			System.out.println("变量b1, b2, b3中至少有一个的值为true");
		} else {
			System.out.println("变量b1, b2, b3的值都为false");
		}
		// 同样,||是短路或,意思是:当对操作数的表达式进行从左到右运算时,若遇到有操作数的值为true,就结束运算,将结果置为true。
		if (b1 || ((j = j - 1) == 1)) {
		}
		System.out.println("j = " + j);
		if (b3 || ((j = j - 1) == 1)) {
		}
		System.out.println("j = " + j);

		// !运算符:对操作数的值进行取反运算,操作数为true,取反为false。
		if (!b1) {
			System.out.println("变量b1 为 false,因为b1取反后的值为true");
		} else {
			System.out.println("变量b1 为 true,因为b1取反后的值为false");
		}

		// &运算符,和&&一样,对操作数做与操作,不同的是它不是短路的,它会运算完所有的操作数表达式
		if (b3 & ((j = i) == 2)) {
			System.out.println("b3 & ((j=i) == 2): true");
		} else {
			System.out.println("b3 & ((j=i) == 2): false");
		}
		System.out.println("j = " + j); 
		if (b1 & ((j = j - 1) == 0)) {
		}
		System.out.println("j = " + j);

		// |运算符,和||一样,对操作数进行或操作,但它不是短路的。
		if (b1 | ((j = i) == 2)) {
			System.out.println("b1 | ((j=i) == 2): true");
		} else {
			System.out.println("b1 | ((j=i) == 2): false");
		}
		System.out.println("j = " + j); 
		if (b3 | ((j = j - 1) == 1)) {
		}
		System.out.println("j = " + j); 

		// ^运算符,对操作数做异或操作,相同为false,不同为true
		if (b1 ^ b2) {
			System.out.println("变量b1,b2的值不同!");
		} else {
			System.out.println("变量b1,b2的值一样!");
		}

		// 注意:开发人员应该尽量使用短路与&&或者短路或||,而少用&和|操作符,因为,它们对整个条件表达式的计算的结果是一样的。
		// 使用&&和||可以减少运行时间。尽量不要在条件表达式中进行赋值等运算,可以将这类语句放到if之外。
		// j = i;
		// if (b3 && (j==2)){
		// }
	}

	/**
	 * 赋值运算符: =; +=; -=; *=; /=; &=; |=; ^=;
	 */
	private void evaluateOperator() {
		// =是最常用的赋值运算符
		int i = 5;// 将变量i的值赋为5
		// +=运算符是先将运算符左边的操作符的值加上右边的操作数的值,将结果再赋值给运算符左边的操作符
		i += 3;// 等价于 i = i + 3;
		i -= 3;// 等价于i = i - 3;
		i *= 3;// 等价于i = i * 3;
		i /= 3;// 等价于i = i / 3;
		i &= 3;// 等价于i = i & 3
		System.out.println("(i &= 3) = " + i);
		i |= 3;// 等价于i = i | 3
		System.out.println("(i |= 3) = " + i);
		i ^= 3;// 等价于i = i ^ 3
		System.out.println("(i ^= 3) = " + i);
	}

	/**
	 * 其他运算符: 三元运算符; ++; --; -;
	 * 
	 */
	private void otherOperator() {
		int i = 5;
		// ++是将操作数加1
		// ++i表示先将i加1后再进行运算
		if (i++ == 5) {
			System.out.println("表达式(i++ == 5)的值为true");
		} else {
			System.out.println("表达式(i++ == 5)的值为false");
		}
		System.out.println("i = " + i);
		// i++表示先进行运算,再将i的值加1
		i = 5;
		if (++i == 5) {
			System.out.println("表达式(++i == 5)的值为true");
		} else {
			System.out.println("表达式(++i == 5)的值为false");
		}
		System.out.println("i = " + i);
		// --将操作数减1,同样,--i是先将i减1,再进行运算;i++是先进行运算,再将i减1
		i--;
		--i;

		// 可以用三目运算符替代简单的if语句
		// 格式是: x = a ? b : c;如果a的值为true,则将b的值赋予x,否则将c的值赋予x。
		int x = (i >= 0) ? i : -i; //将一个减号-和数字连用,是取数的负数
		System.out.println("i的绝对值为: " + x); 
	}

	public static void main(String[] args) {
		Operator test = new Operator();
		System.out.println("计算运算符方法的输出:");
		test.computeOperator();
		System.out.println("比较运算符方法的输出:");
		test.compareOperator();
		System.out.println("位运算符方法的输出:");
		test.bitOperator();
		System.out.println("布尔运算符方法的输出:");
		test.booleanOperator();
		System.out.println("赋值运算符方法的输出:");
		test.evaluateOperator();
		System.out.println("其他运算符方法的输出:");
		test.otherOperator();
	}
}

 

分享到:
评论

相关推荐

    java_JDK_实例开发宝典

    Java JDK实例开发宝典是一本专注于Java编程实践的书籍,旨在通过丰富的实例帮助开发者深入理解和应用Java语言。在深入探讨Java JDK(Java Development Kit)的过程中,本书覆盖了多个关键知识点,包括基础语法、面向...

    jdk1.7.0_79下载jdk-7u79-windows-x64

    - **钻石运算符**:简化了匿名类型实例化,如`new ArrayList()`。 - **动态类型**:引入了`java.lang.invoke.MethodHandle`等类,支持运行时方法查找和调用。 **2. JDK 1.7.0_79更新** JDK 1.7.0_79是一个重要的...

    jdk1.7.0_80.zip

    5. **菱形运算符**:在创建匿名内部类或泛型实例时,可以省略类型参数,编译器会自动推断类型,如`new ArrayList()`。 6. **异常处理**:引入了`try-with-resources`语句,可以自动关闭实现了`AutoCloseable`接口的...

    jdk1.7.0_79

    Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具和库。"jdk1.7.0_79" 是Oracle公司发布的Java SE(标准版)7的第79次更新。这个版本是在2015年4...

    java JDK 实例开发宝典

    Java JDK实例开发宝典是一本全面深入探讨Java开发工具包(Java Development Kit)的实践指南。JDK是Java编程的基础,包含了编译器、运行环境、调试工具和其他实用工具,对于任何想要学习或精通Java编程的开发者来说...

    JDK_API_1_6_zh_CN中文版

    1. **Java语言基础**:JDK API文档首先介绍了Java语言的基本语法,包括数据类型、变量、运算符、控制结构(如if语句、for循环、while循环)、方法、类和对象等概念。 2. **面向对象编程**:文档深入讲解了面向对象...

    jdk1.7.0_55_x64.rar

    - **类型推断(Type Inference)**: 通过使用“钻石运算符”(),在创建泛型实例时,编译器可以自动推断类型,简化代码。 - **多租户架构(Multi-Tenant Applications)**: 使开发者能更轻松地构建支持多个独立客户...

    jdk1.7.0_51,jdk6,Oracle官方已经不再提供jdk6、7的下载

    Java开发工具包(Java Development Kit,简称JDK)是Java编程语言的核心组件,它包含了编译器、运行环境以及各种工具,使得开发者能够编写、测试和运行Java应用程序。标题和描述提到的"jdk1.7.0_51"和"jdk6"是JDK的...

    java-jdk1.7.0_80

    Java JDK 1.7.0_80是Oracle公司发布的Java Development Kit的一个特定版本,用于支持Java编程语言的开发和运行。这个版本属于Java SE(Standard Edition)平台,主要用于桌面应用和服务器端开发。JDK是Java程序员的...

    jdk1.7.0_80

    4. **菱形运算符**:在创建匿名内部类或泛型实例时,菱形运算符()简化了代码,自动推断出父类或接口的类型参数。 5. **NIO.2**:对非阻塞I/O进行了扩展,提供了新的文件系统API,支持异步文件操作和文件属性查询...

    [Java参考文档].JDK_API_1_6_zh_CN.zip

    1. **基本语法**:Java的基本语法包括变量、数据类型(如整型、浮点型、字符型、布尔型)、运算符、流程控制(如if语句、switch语句、for循环、while循环)、异常处理和封装等。 2. **类和对象**:Java是面向对象的...

    linux版本jdk1.7.0_80以及安装步骤.rar

    - **类型推断的钻石运算符**:简化了泛型实例化。 - **动态语言支持**:增加了invokedynamic指令,为脚本语言提供了更好的支持。 请根据你的具体需求和系统环境,参考上述步骤安装JDK 1.7.0_80,并确保正确配置环境...

    JAVA JDK实例宝典

    《JAVA JDK实例宝典》是一本全面覆盖Java开发核心领域的指南,旨在帮助开发者深入理解和熟练应用JDK中的各种工具和技术。书中的内容丰富多样,涵盖了从基础语法到高级特性的各个方面,以下是各部分的主要知识点: 1...

    java JDK 实例开发宝典.rar

    Java JDK实例开发宝典是一本深入探讨Java编程的资源集合,尤其适合初学者和有经验的开发者提升技能。这本书的核心价值在于它提供的源代码实例,让读者能够在实践中学习和理解Java语言的各个方面。 首先,Java JDK是...

    java jdk 实例宝典(光盘源码)

    Java JDK实例宝典是一本深度探讨Java开发工具集(Java Development Kit)的实践性书籍,其光盘源码为读者提供了丰富的示例代码,便于学习和理解。这本书旨在帮助Java开发者深入掌握JDK中的核心概念和技术,提升编程...

    jdk1.7.0_51.zip

    8. **钻石运算符**:在创建匿名类型实例时,编译器可以自动推断出类型参数,如`new ArrayList()`,这使得代码更加简洁。 9. **改进的集合框架**:添加了`Objects`类,提供了实用的静态方法,如`equals()`、`...

    jdk1.7.0_79 tar gz linux 系统64位

    - **钻石运算符**:自动推断泛型实例化时的类型,如`List&lt;String&gt; list = new ArrayList();`,简化了代码。 - **改进的类型推断**:允许局部变量的类型推断,如`var`关键字的使用(Java 8引入,但这里提及是因为它...

    jdk1.7.0_80_32bit.zip

    Java Development Kit(JDK)是Java编程语言的核心组件,它为开发者提供了编译、调试和运行Java应用程序所需的所有工具。JDK7,全称为Java Development Kit 7,是Oracle公司发布的Java平台的一个重要版本,其版本号...

    java jdk经典实例

    Java JDK经典实例是Java初学者不可或缺的学习资源,它包含了169个精心挑选的案例,覆盖了JDK中的大部分功能和细节。通过这些实例,学习者可以深入理解Java语言的核心特性,提升编程技能。以下是对这些知识点的详细...

    JAVA JDK实例开发宝典源码

    Java JDK实例开发宝典源码是一份非常宝贵的资源,它涵盖了Java编程语言的各个方面,旨在帮助开发者深入理解和熟练运用Java JDK。这份源码集合包含了众多的实际示例,可以帮助初学者和经验丰富的开发者巩固基础,提升...

Global site tag (gtag.js) - Google Analytics