java夯实基础-运算符

本文测试了  算术运算符: + - * / %   +=  -=    *=   /=   %= ;逻辑运算符: &&  ||  !    &   |   ;关系运算符:<   >   ==   <=   >=   !=  ;位运算符: &   |   ~   ^   >>   <<    ;其他运算符:++   --    =   instanceof    。对这些运算符的特点、优先级、注意事项都有说明。

一、算术运算符

package com.wllfengshu.test;

import org.junit.Test;

/**
 * 测试运算符: + - * / %
 *         +=  -=    *=   /=   %=
 * 1、运算符作用
 * 2、优先级测试
 * 3、自增与自减
 * 4、注意事项
 * @author Administrator
 *
 *补充:java中的方法名、变量名的最大长度可以为2的16次方个字符,换算后也就是64KB的大小
		也就是说最大可以为64KB,超过这个长度后java文件就无法被编译了
		但一般是见名知意,不超过20个字符
 */
public class Test1算数运算符 {

	//+
	@Test
	public void testAdd() {
		int a=1;
		a+=2;
		System.out.println(Integer.MAX_VALUE);//2147483647
		int b=Integer.MAX_VALUE+a;
		System.out.println(b);//溢出:-2147483646
		int c=Integer.MAX_VALUE+1;
		System.out.println(c);//溢出:-2147483648
		int d=2147483647;//int存储的最大值
//		int e=2147483648;//报错:此时编译器已经判断数据过大
		int f=2147483647+1;//此时数据随已溢出,但是只有当程序运行期间才能发现错误
		System.out.println(Integer.MAX_VALUE + Integer.MIN_VALUE);//-1,把0归为整数里,负的更多
		int g;
		int h;
//		int i=g+h;//变量需要初始化
		//结论:直接用数字赋值,编译器直接判断数据是否过大(或过小);运算式的最后结果是否溢出,只有当程序运行期间才能发现
	}

	//-
	@Test
	public void testSubtract() {
		int a=1;
		a-=2;
		System.out.println(Integer.MAX_VALUE);//2147483647
		int b=Integer.MAX_VALUE+a;
		System.out.println(b);//溢出:-2147483646
		int c=Integer.MAX_VALUE+1;
		System.out.println(c);//溢出:-2147483648
		int d=2147483647;//int存储的最大值
//		int e=2147483648;//报错:此时编译器已经判断数据过大
		int f=2147483647+1;//此时数据随已溢出,但是只有当程序运行期间才能发现错误
		System.out.println(Integer.MAX_VALUE + Integer.MIN_VALUE);//-1,把0归为整数里,负的更多
		//结论:直接用数字赋值,编译器直接判断数据是否过大(或过小);运算式的最后结果是否溢出,只有当程序运行期间才能发现
	}
	
	//*
	@Test
	public void testMultip() {
		int a=1;
		a*=2;
		a=a+3*4;//乘法优先级高于加法
		double b=2.1;
		double c=5;
		c*=b;
		System.out.println(c);
		int e = 0;
		e*=2+3;//【报错】必须初始化变量e:等价于:e=e*(2+3);
		//结论:乘法优先级高于加法和减法
	}
	
	// /
	@Test
	public void testDivision() {
		int a=1;
		a/=2;
//		a/=0;//[算术异常]:程序运行时报错
		//结论:被除数不能为0
	}
	
	// %
	@Test
	public void testMod() {
		int a=2;
		int b=3;
		int c=b%a;//根据
		System.out.println(c);
		int aa=-2;
		int bb=5;
		System.out.println(aa%bb);//取模支持对负数进行运算,且结果的符号总是与被除数的符号保持一致
		double d=2.2;
		double e=4.4;
		double f=e%d;
		System.out.println(f);
		double g=4.5%2.2;
		double h=4.5/2.2;
		System.out.println(g);//0.09999999999999964  并不是0.1
		System.out.println(h);
		//结论:小数也可以求模运算,但是存在误差,并不建议对小数求模
	}
}
二、关系运算符

package com.wllfengshu.test;

import org.junit.Test;

/**
 * 测试关系运算符:< > == <= >= !=
 * @author Administrator
 */
public class Test2关系运算符 {
	@Test
	public void testRelation() {
		int a = 1;
		int b = 2;
		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("b >= a = " + (b >= a));
		System.out.println("b <= a = " + (b <= a));
		// 关系运算符优先级低于算术运算符
	}
}
三、逻辑运算符

package com.wllfengshu.test;

import org.junit.Test;

/**
 * 测试逻辑运算符: &&  ||  !    &   | 
 * 1、运算符作用
 * 2、优先级测试
 * 3、注意事项
 * @author Administrator
 *
 */
public class Test3逻辑运算符 {
	// &&  
	@Test
	public void test1(){
		int a=1;
		int b=2;
		if (a==b && (a++)==b) {
			System.out.println("a等于"+a);
		}else {
			System.out.println("a等于"+a);//1
		}
		//总结:短路“与”,当第一个条件不成立,不再执行后面的条件
	}
	// ||
	@Test
	public void test2(){
		int a=2;
		int b=2;
		if (a==b || (a++)==b) {
			System.out.println("a等于"+a);//2
		}else {
			System.out.println("a等于"+a);
		}
		//短路“或”,当第一个条件成立,不再执行后面的条件
		int c=3,d=4,e=5;
		if (a<(++c) || a>(++d) && a<(++e)) {
			System.out.println(c);//4
			System.out.println(d);//4
			System.out.println(e);//5
			//程序只执行了a<(++c),前为真,后面不再执行
		}
	}
	// !    
	@Test
	public void test3(){
		boolean a=true;
		boolean b=false;
		if (!a==b) {
			System.out.println("条件成立");
		}
		//总结:非的优先级高于其他逻辑运算符
	}
	// &  
	@Test
	public void test5(){
		int a=1;
		int b=2;
		if (a==b & (a++)==b) {
			System.out.println("a等于"+a);
		}else {
			System.out.println("a等于"+a);//2
		}
		//总结:不是短路“与”,当第一个条件不成立,继续执行后面的条件
	}
	// |  
	@Test
	public void test6(){
		int a=2;
		int b=2;
		if (a==b | (a++)==b) {
			System.out.println("a等于"+a);//3
		}else {
			System.out.println("a等于"+a);
		}
		//不是短路“或”,当第一个条件成立,继续执行后面的条件
	}
}
四、位运算符

package com.wllfengshu.test;

import org.junit.Test;

/**
 * 测试运算符: &   |   ~   ^   >>   <<
 * @author Administrator
 *
 */
public class Test6位运算符 {
	//&
	@Test
	public void test1(){
		int a=3;//转二进制:0011
		int b=a & 1;//把1转二进制:0001   
		System.out.println(b);//结果为0001   所有为1
		//总结:对应地数位都为1,才为1,其余都为0
	}
	//|
	@Test
	public void test2(){
		int a=3;//转二进制:0011
		int b=a | 1;//把1转二进制:0001   
		System.out.println(b);//结果为0011   所有为3
		//总结:对应地数位都为0,才为0,其余都为1
	}
	//~  非
	@Test
	public void test3(){
		int a=3;//转二进制:0000...00000011
		int b=~a;
		System.out.println(b);
		System.out.println(Integer.toBinaryString(b));//结果为11111111 11111111 11111111 11111100   所有为-4
		//总结:a对应的位为1,则b对应地位为0;否则为1
	}
	//^  异或
	@Test
	public void test4(){
		int a=3;//转二进制:      0000...00000011
		int b=4;//把1转二进制:0000...00000100
		System.out.println(b^a);//结果为 0111   所有为7
		//总结:a与b对应位相同,则结果对应位为0;否则为1
	}
	//>>
	@Test
	public void test5(){
		int a=3;//转二进制:      0000...00000011
		int b=a>>1;
		System.out.println(b);//结果为 0000...00000001   所以为1
		//总结:右移运算符, a >> 1,a二进制减少一位,相当于num除以2
	}
	//<<
	@Test
	public void test6(){
		int a=3;//转二进制:      0000...00000011
		int b=a<<1;
		System.out.println(b);//结果为 0110   所有为6
		//总结:左移运算符,a << 1,a 二进制增加一位,相当于num乘以2
	}
}

五、其他运算符

package com.wllfengshu.test;

import org.junit.Test;

/**
 * 测试其他运算符:++   --    =   instanceof
 * @author Administrator
 *
 */
public class Test5其他运算符 {
	
	//++  自增
	@Test
	public void test1(){
		int a=1;
		int b=1;
		System.out.println(a++);//1
		System.out.println(++b);//2
		//++在前,表示在使用变量a之前加一;++在后,表示在使用变量a之后加一
	}
	//--  自减
	@Test
	public void test2(){
		int a=1;
		int b=1;
		if(a--==0){
			System.out.println("条件成立");
		}else{
			System.out.println("条件不成立");
		}
		//--在后,表示在使用变量a之后减一
	}
	//  =
	@Test
	public void test3(){
		int a=2;
		int b=1;
		b=a;
		System.out.println(b);
		//赋值运算符优先级最低
	}
	//  instanceof 
	@Test
	public void test4(){
		A a=new A();
		B b=new B();
		C c=new C();
		boolean d=a instanceof A;//对象a是否是A类的实例
		boolean e=a instanceof C;//对象a是否是A类的子类C的实例
		boolean f=c instanceof A;//对象c是否是C类的子类C的实例
		System.out.println(d);//true
		System.out.println(e);//false
		System.out.println(f);//true
		//通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
	}
	class A{
	}
	class B{
	}
	class C extends A{
	}
}

【有些地方考虑不周或者错误的地方,欢迎大家指正】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值