栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java基础知识(三)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java基础知识(三)

目录

一、基础题练习

二、Java运算符


一、基础题练习
(1)第一题:
		byte b1=10,b2=20,b;
		b=b1+b2;
		b=10+20;
		哪句是编译失败的呢?为什么呢?
		
		
	考点:
		1)Java隐式类型转换
		2)Java强转类型转换
		3)变量相加和常量相加的区别
		
		变量相加:要考虑这个两个变量的数据类型,
		b =b1 +b2 ; b1和b2都是byte类型,当前参与运算,b1和b2先提升为int,结果应该int类型
		而b是byte类型,无法接收int类型的结果,必须强制类型转换
		
		常量相加:先相加,然后看计算结果是否在固定的类型范围内,在范围内就直接赋值了!
	

   class  DataTypeDemo2{
	
	public static void main(String[] args){
		
		  
		  //定义三个变量
		  byte b1 = 10,b2 = 20,b ;
		  
		  //第一句话
		 // b=b1+b2 ;//不兼容的类型: 从int转换到byte可能会有损失
		 
		 //需要强转
		// b = (byte)(b1+b2) ;
		
		
		//第二句话
		b=10+20;
		
		System.out.println("b的结果是:"+b) ;
	}
}




(2)第二题:byte  x = 129; 是否编译通过,结果是多少,计算过程;

    
	
	byte类型的取值范围:-128~127 
	129已经超出范围,整数类型默认就是int,jvm在编译的时候通过不了,认为129应该int类型接收
	而左边使用的byte类型,无法接收int类型,必须强转 !

class DataTypeDemo3{
	
	public static void main(String[] args){
		
		
		//定义一个变量x
		//byte x = 129 ;//不兼容的类型: 从int转换到byte可能会有损失
		
		//强转
		byte x = (byte)129;
		System.out.println(x) ;
	}
}


    
	  129的原码 ----已经超出了byte类型的范围,jvm编译:整数默认int
			00000000 00000000 00000000 10000001  ---原码,反码,补码都相同
			
			计算机底层计算,使用补码进行计算
		
		byte x = (byte)129; 强转
		(00000000 00000000 00000000) 10000001 ---补码截取之后  10000001  一个字节的byte类型
		
	截取之后的补码	
	           最高符位 		  数值位
		
		    1			  0000001
			                   -1
--------------------------------------------------
					   1             0000000  反码
------------------------------------------------
		 1			  1111111
					
					
		-			 64+32+16+8+4+2+1
					=  -127
					
求byte=300?		44			
		


二、Java运算符
java 运算符的划分:
(1)算数运算符 +  -  * /  %   
       注意:/在java中取整   java中在对小数计算会出现一点偏差(计算机是伪计算)
       扩展的运算符++   --
      A.单独使用:++/--在数据的前面/后面 ---->都是对当前数据的自增1/自减1   
      B.参与运算使用:
         a:++/--在数据的前面 ----->先自增或自减,在参与运算
         b:++/--在数据的后面------->先参与运算,再自己自增或自减   
         eg:int x=4;
         int y=(X++)+(++x)+(x*10) 结果是70   将x=4赋给y y=4,x=5; ++x时x=5,自增1,x=6;6*10
                          
(2)赋值运算符
      A.基本赋值运算符:=     ------>将等号右边的值赋给左边的变量
      B.扩展赋值运算符:+=,-+,*=,/=,%=
      eg:面试题
          有一下代码,那一句代码会编译失败,为什么?
       (A) short  s=1;
            s= s+1;
		s 的值有问题吗?
		有问题,s=s+1;java默认类型的提升,当 byte,char ,short 三者之间不转换,
		一旦参与转换的话,首选会提升到int型
		s= (short)(s+1);----->强制转换
		System.out.println("s的值为:"+s);
	(B) short  s=1;
            s+=1;
	    System.out.println("s的值为:"+s);
            S+=1;等价于	(short)(s+1)	----->隐藏了强制类型的转换
		没有问题
(3)比较运算符 < ,<=,> ,>=,==,!=    ----->最终的结果为boolean ,要么true,要么false
(4)逻辑运算符(重点) 
   A.基本运算符: 
             逻辑单与&   ---->并列关系,有false则false
             逻辑单或|  ----->或得关系,有真则真,假假为假
             逻辑异或^  ------>相同则为false,不同则为true
             逻辑非!    ------>非true则false,偶数个非是它本身
            
    B.扩展逻辑运算符
            逻辑双与&&
	   
 
           逻辑单与和逻辑双与的区别:
	 
      同:都表示并列条件,有false 则false
	  异:逻双与&&连接的表达式,如果左边为false,则右边就不在执行,有短路的效果.执行的效果比较高
	     逻辑单与&,执行扥的效果比较低,左边表达式不成立的时候,右边的表达式仍要执行
		 
	  逻辑双或||
	    连接的表达式左边的为true,则右边的表达式就不会执行了,具有短路的效果,有true则true 
(5)位运算符
  位运算符号:使用变量或者数值本身进行计算的
  基本符号:
    位与&:有0则0
    位或|:有1则1
    位异或^: 相同则为0,不同则为1
    反码~: 在数据的补码基础上,全部按位取反0变1,1变0
     
(6)三元运算符
    A:<<:左移
       将<<符号左边的数据向左移动多少位,右边不够的补0,最高位丢弃掉			
       特点:将<<符号左边 的数据乘以2的移动次幂				
       eg: 3<<2  = 3 *2^2 = 12
    B:>>:右移
	  将>>符号左边的数据向右移动多少位,
	  最高位是0,右移后,空缺位补0;最高位是1,最高位补1。				
	  特点:使用>>左边数据除以2的移动次幂				
	  eg:  24>>2	= 24/2^2 = 6
						
						
   C:>>>:无符号右移
      将>>>符号左边的数据进行向右移动,无论最高位是1还是0,都是补0
			

少年的肩应该担起草长莺飞和明月清风。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867460.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号