Java常量优化机制

package com.briup.day02;
/**
 * @author chouhan
 * 3.常量优化机制、运算符
 */
public class Test1 {
	public static void main(String[] args) {
//		float f=3.14;
		float f=3.14f;//必须加上f
		System.out.println(f);
//		boolean b=1;
		boolean b=true;//boolean类型只有true和false
		System.out.println(b);
		//0x771默认是int类型,但0x771=0111 0111 0001有效值超过8位会出现数据的丢失,报错
//		byte b1=0x771;
		/**
		 * 1.隐式类型转换
		 * byte,short,char类型数据在进行算术运算时,会自动提升为int,
		 * 其他类型运算时,表示范围小的会自动提升为范围大的,然后再运算。
		 * byte,short,char-int-long-float-double
		 * 赋值过程中,小数据类型可以直接赋值给大类型,类型自动进行转换。
		 * 2.显式类型转换
		 * 赋值过程中,大类型数据赋值给小类型变量,会报错,必须通过强制类型转换实现。
		
		 * 为什么float大于long?因为计算机底层保存float类型时还有指数位。
		 * long类型最大值:2^63-1
		 * float类型非最大值:1*(1+0)*2^(254-127)=1*1*2^127=2^127
		 * float类型可以取到2^127 远大于long类型最大值 2^63-1
		 */
		byte b1=126;
//		byte b2=b1+3;//b1在计算前先转换成int类型的126,+3得到129,补码运算得到的是-127
		byte b2=(byte) (b1+3);
		/**
		 * 为什么129会变成-127?
		 * 129:0000 0000 0000 0000 0000 0000 1000 0001先截取,得到1000 0001
		 * 再计算,是对1000 0001进行计算,对负数进行原反补:-127
		 */
		System.out.println("b2="+b2);
		short s1=1; 
		s1=(short) (s1+1);
		short s2=1;
		s2+=1;
		//常用的ASCII码值:a-97,A-65,0-48
		//字符类型数据在进行运算或赋值时,会根据ASCII码表进行运算
		//字符串参与运算的+号表示拼接,字符串+其他任意类型得到的结果都是字符串
		
		//取余:4%-3和-4%3:只看左操作数的正负
		System.out.println(4%(-3));//1
		System.out.println((-4)%3);//-1
		//++,--:++a先赋值,a++先运算。
		//++、--和+=、-=中,系统默认会进行隐式类型转换
		int x=4;
		int y=(x++)+(++x)+(x*10);
		/**
		 * 赋值操作也是运算。
		 * a++先运算是指把4放入内存空间,参与完运算,内存空间才变成5;
		 * ++a先赋值是指先自增5变成6,再放入内存空间,再运算;
		 * 4+6+6*10=70
		 */
		System.out.println(y);//70
		int i=1;
		System.out.println(i++ + i--);//1+1 +2 -1=3
		
		/**
		 * 位运算符:& | ~ ^
		 * 逻辑运算符:& | ! ^ && ||
		 */
		//^:异或:相同为0,不同为1
		
		/**交换俩个变量的值,但不能使用中间变量**/
		//使用中间变量的情况
		int p1 = 1;
		int q1 = 2;
		int temp = p1; //p1:1 q1:2 temp:1
		p1 = q1;//p1:2 q1:2 temp:1
		q1 = temp;//p1:2 q1:1
		//不是使用中间变量,使用+,-操作
		int p2 = 1;
		int q2 = 2;
		q2 = p2+q2;//p2:3 q2:2
		q2 = p2-q2;//p2:3 q2:1
		p2 = p2-q2;//p2:2 q2:1
		//不是使用中间变量,使用^操作
		int p3 = 1;
		int q3 = 2;
		p3 = p3^q3;
		q3 = p3^q3;
		p3 = p3^q3;
		/**
		 * 如果把这三种方法封装起来调用,把两个数作为方法的形参;
		 * 那么操作的是两个形参,最后输出的只会是实参的值,交换没有意义。
		 */
		
		//左移,右移,无符号右移
		/**
		 * 1.>>:算术右移位运算,本质就是除以2的n次方,这个n是右移的位数。只保留整数部分。
		 * 正数右移之后,最左边空出的位置,都要补0;负数右移之后,最左边空出的位置,都要补1。
		 * 2.<<:左移位运算,本质就是乘以2的n次方,n是左移的位数。
		 * 无论正数负数左移之后,最右边空出的位置,都要补0。
		 * 比如:对int类型进行移动33位,实际上只移动了33%32=1位。如果对int型移动32位,实际上只移动了32%32=0位。
		 * 3.>>>:逻辑右移位运算,也叫无符号右移运算,本质就是除以2的n次方,n就是右移的位数。
		 * 只保留整数部分正数和负数右移之后,最左边空出的位置,都要补0。
		 */
		
		/**
		 * 控制语句if,分支语句switch-case,
		 * 1.switch适用于比较固定值,if控制语句可以替代所有的switch-case,if适用于判断区间
		 * 
		 * 循环语句for,while,do-while,
		 * 2.for循环和while循环的区别:
		 * 1)如果想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。
		 * 2)不知道用谁就用for循环。因为变量及早的从内存中消失,可以提高内存的使用效率。
		 * 
		 * 跳出循环的语句break,continue,return
		 * 3.(1)break用在循环体内部,作用是结束整个循环;
		 * (2)continue用于循环体内部,作用是结束本次循环,进入到下一次循环;
		 * (3)return是用于结束方法的语句。
		 */
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值