0
点赞
收藏
分享

微信扫一扫

Java零基础学习Day4

朱小落 2022-03-30 阅读 79
java

关于浮点型数据类型
 *      float 单精度【4个字节】
 *      double 双精度【8个字节,精度较高】
 *      
 *    double的精度太低【相对来说的】,不适合做财务软件。
 *    财务涉及到钱的问题,要求精度较高,所以SUM在基础SE类库当中为
 *    程序员准备了精确度更高的类型,只不过这种类型是一种引用数据类型,
 *    不属于基本数据类型,它是:java.math.BigDecimal
 *    
 *    其实Java程序中SUM提供了一套庞大的类库,Java程序员是基于这套
 *    基础的类库来进行开发的。所以要知道Java的SE类库的字节码在哪儿,
 *    要知道Java的SE类库的源码在哪儿?
 *       *SE类库字节码:C:\Program Files (x86)\java\jdk1.7.0_75\jre\lib\rt.jar
 *       *SE类库源码:C:\Program Files (x86)\java\jdk1.7.0_75\src.zip【要根据自己安装的软件来          定】
 *      
 *      例如:String.java和String.class
 *      我们的(String[] args)中的String使用的就是String.class字节码文件
 *      
 *      在java语言当中,所有的浮点型字面值【3.0】,默认值当做double类型来处理,
 *      要想该字面值当做float类型来处理,需要在字面值后面添加F/f.
 *      
 *      注意:
 *         double和float在计算机内部二进制存储的都是近似值。
 *         在现实世界当中有一些数字是无限循环的,例如:3.33333333333333333...
 *         计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值。

public class DataTypeTest06 {

	public static void main(String[] args) {
		/*
		 * 3.0是double类型的字面值
		 * d是double类型的变量
		 * 不存在类型转换
		 */
		 double d=3.0;
		 System.out.println(d);
		 
		 /*
		  * 5.1是double类型的字面值
		  * f是float类型的变量
		  * 大容量转换小容量需要加强制类型转换符,所以以下程序编译错误
		  * float f=5.1;
		  * 
		  * 解决方案
		  * 第一种:强制类型转换
		  * float f=(float)5.1;
		  * 第二种:没有类型转换
		  * float f=5.1f;
		  */
		 float f=(float)5.1;
		 System.out.println(f);
		 float f1=5.1f;
		 System.out.println(f1);
		 
	}

}

         
  关于boolean类型
 *   在Java语言当中boolean类型只有两个值:true/false,没有其他值。
 *   不像c语言当中,0和1可以表示假和真。
 *   在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1。
 *   布尔类型在实际开发当中非常重要,经常使用在逻辑运算和条件控制语句当中。
 */  

public class DataTypeTest07 {

	public static void main(String[] args) {
		//编译错误:不兼容的类型
		//boolean flag=1;
		
		//boolean loginSuccess=false;
		boolean loginSuccess=true;	
		//if语句【条件控制语句】
		if(loginSuccess)
		{
			System.out.println("恭喜你,登录成功!");
		}
		else {
			System.out.println("对不起,用户名不存在或者密码错误!");
		}
	}

}

 /*
 * 关于基本数据类型之间的互相转换:转换规则
 *    1、八种基本数据类型当中除了布尔类型之外剩下的7种类型之间都可以互相转换
 *    
 *    2、小容量向大容量转换,称为自动类型转换,容量从小到大排序:
 *           byte < short < int < long < float < double  
 *                   char <
 *         注意:
 *             任何浮点类型不管占用多少个字节,都是比整数型容量大。
 *             char和short可表示的种类数量相同,但是char可以取更大的正整数
 *             
 *     3、大容量转换成小容量,叫做强制类型转换,需要加强制类型转换符,
 *     程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用。
 *     
 *     4、当整数字面值没有超出byte,short,char的取值范围,
 *        可以直接赋值给byte,short,char类型的变量。
 *        
 *     5、byte,short,char混合运算的时候,各自先转换成int类型再做运算。
 *     
 *     6、多种数据类型混合运算,先转换成容量最大的那种类型再做运算。
 *     
 */

/*
 * 关于Java编程中运算符之:算术运算符
 *       +  求和
 *       - 相减
 *       * 乘积
 *       / 商
 *       % 求余数【取模】
 *       ++ 自加1
 *       -- 自减1
 *   注意:
 *   一个表达式当中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。
 *   没有必要去专门记忆运算符的优先级
 */

 完整代码如下:

public class DataTyteTest08 {

	public static void main(String[] args) {
		//以下以++为例,--运算符自学!
		//关于++运算符【自加1】
		
		int k=10;
		
		//++运算符可以出现在变量后面【单目运算符】
		k++;
		
		System.out.println(k);  //11
		
		int y=10;
		
		//++运算符可以出现在变量前面【单目运算符】
        ++y;
    	System.out.println(y);  //11
        
		/*
		 * 小结:
		 * ++运算符可以出现在变量前,也可以出现在变量后,无论是变量前还是变量后
		 * 只要++运算结束,该变量中的值一定会自加1
		 */
    	
    	/*
    	 * ++ 出现在变量后
    	 * 规则:先做赋值运算,再对变量中保存的值进行自加1
    	 */
    	int a=100;
    	int b=a++;
    	System.out.println(a);  //101
    	System.out.println(b);  //100
    	
    	/*
    	 * ++ 出现在变量前
    	 * 规则:先进行自加1运算,然后再进行赋值操作。
    	 */
    	int m=20;
    	int n=++m;
    	System.out.println(m);  //21
    	System.out.println(n);  //21
    	
    	int s=100;
    	System.out.println(++s); //101
    	System.out.println(s);  //101
    	System.out.println("-------------------");
    	System.out.println(--s);  //100
    	System.out.println(s++);  //100
    	System.out.println(s--);  //101
    	System.out.println(s--);  //100
    	System.out.println(s--);  //99
    	System.out.println(s);    //98
    	
    	
	}

}

 /* 关系运算符
 *     >       大于
 *     >=      大于等于
 *     <       小于
 *     <=      小于等于
 *     ==      等于
 *     !=     不等于
 *     
 *     
 *     =        是赋值运算符
 *     ==       是关系运算符
 *    关系运算符的运算结果一定是布尔类型:true/false
 *    
 *    关系运算符的运算原理:
 *      int a=10;
 *      int b=10;
 *      a>b 比较的时候,比较的是a中保存的10这个值和b中保存的10这个值之间的大小比较。
 *      a==b也是如此
 */

public class OperatorTest02 {

	public static void main(String[] args) {
		 
		int a=10;
		int b=10;
		System.out.println(a>b);//false
		System.out.println(a>=b);//true
		System.out.println(a<b);//false
		System.out.println(a<=b);//true
		System.out.println(a==b);//true
		System.out.println(a!=b);//false

	}

}

/*
 * 逻辑运算符号
 *   &     逻辑与【并且】  (两边的算子都是true,结果才是true)
 *   |      逻辑或【或者】   (两边的算子只要有一个是true,结果就是true)
 *   !    逻辑非(取反,!false就是true,这就是一个单目运算符)
 *   &&    短路与
 *   ||       短路或
 * 1、逻辑运算符要求两边的算子都是布尔类型,并且逻辑运算符最终的运算结果也是一个布尔类型;
 * 2、短路与和逻辑与最终的运算结果是相同的,只不过短路与存在短路现象;
 * 3、短路或和逻辑或最终的运算结果是相同的,只不过短路或存在短路现象;
 * 4、什么情况下发生短路现象呢?
 * 5、什么时候选择使用逻辑与运算符?什么时候选择使用短路与运算符?
 */

 /*
         * 从某个角度来看,短路与更智能。由于后面的表达式可能不执行,
         * 所以执行效率较高。这种方式在实际的开发中使用较多。短路与比
         * 逻辑与使用的多,短路与更常用。
         * 
         * 但是,在某些特殊的业务逻辑当中,要求运算两边的算子必须全部执行,
         * 此时必须使用逻辑与,不能使用短路与,使用短路与可能导致右边的
         * 表达式不执行。
         */
        /*
         * 什么情况下发生短路或?
         *       *第一个表达式执行结果是true,会发生短路或。
         * 什么情况下发生短路与?
         *       *第一个表达式执行结果是false,会发生短路与。
         */

 /*关于java中的赋值类运算符:
         *    赋值类运算符包括两种:
         *      *基本的赋值运算符:=
         *      *扩展的赋值运算符
         *           +=
         *           -=
         *           *=
         *           /=
         *           %=
         *      赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量  
         *   
         *注意以下代码
         *  byte i=10;
         *  i+=5;等同于:i=(byte)(i+5);
         *  int k=10;
         *  k+=5;等同于:k=(int)(k+5);
         *  long x=10L;
         *  int y=20;
         *  y+=x;等同于:y=(int)(y+x);
         *  重要结论:
         *    扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,
         *    无论怎样进行追加或追减,最终该变量的数据类型还是byte类型。
         *    

 完整代码:

public class OperatorTest4 {

	public static void main(String[] args) {
		/*//逻辑与和短路与
		int x=10;
		int y=8;
		System.out.println(x<y&++x<y);
		System.out.println(x);//11
        */
		//逻辑与和短路与
		int x=10;
		int y=8;
		/*
		 * 短路与
		 * x<y结果是false,整个表达式结果已经确定是false
		 * 所有后面的表达式没有再执行,这种现象被称为短路现象。
		 * 短路与才会出现短路现象,逻辑与是不会存在短路现象的。
		 */
		System.out.println(x<y&&++x<y);
		System.out.println(x);//10
		/*
		 * 从某个角度来看,短路与更智能。由于后面的表达式可能不执行,
		 * 所以执行效率较高。这种方式在实际的开发中使用较多。短路与比
		 * 逻辑与使用的多,短路与更常用。
		 * 
		 * 但是,在某些特殊的业务逻辑当中,要求运算两边的算子必须全部执行,
		 * 此时必须使用逻辑与,不能使用短路与,使用短路与可能导致右边的
		 * 表达式不执行。
		 */
		/*
		 * 什么情况下发生短路或?
		 *       *第一个表达式执行结果是true,会发生短路或。
		 * 什么情况下发生短路与?
		 *       *第一个表达式执行结果是false,会发生短路与。
		 */
		/*关于java中的赋值类运算符:
		 *    赋值类运算符包括两种:
		 *      *基本的赋值运算符:=
		 *      *扩展的赋值运算符
		 *           +=
		 *           -=
		 *           *=
		 *           /=
		 *           %=
		 *      赋值类的运算符优先级:先执行等号右边的表达式,将执行结果赋值给左边的变量  
		 *   
		 *注意以下代码:
		 *  byte i=10;
		 *  i+=5;等同于:i=(byte)(i+5);
		 *  int k=10;
		 *  k+=5;等同于:k=(int)(k+5);
		 *  long x=10L;
		 *  int y=20;
		 *  y+=x;等同于:y=(int)(y+x);
		 *  重要结论:
		 *    扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的类型是byte类型,
		 *    无论怎样进行追加或追减,最终该变量的数据类型还是byte类型。
		 *    
		 */
		//10没有超出byte取值范围,可以直接赋值
		byte b=10;
		//b=15;可以,编译通过,15没有超过byte取值范围
		//编译错误,为什么?
		//编译器只检查语法,不运行程序,编译器发现b+5的类型是int类型,b变量的数据类型是byte;
		//大容量向小容量转换需要加强制类型转换型符,所以以下程序编译报错。
		
		//纠正错误
		b=(byte)(b+5);
		System.out.println(b);
		
		byte x1=10;
		x1+=5;//等同于:x1=(byte)(x+5),其实并不等同于:x=x+5
		System.out.println(x1);
		
		byte z=0;
		z+=128;//等同于:z=(byte)(z+128);
		System.out.println(z);//-128【损失精度】
		
		z+=10000;//等同于:z=(byte)(z+10000);
		System.out.println(z);//-112【损失精度】
	}

}
举报

相关推荐

0 条评论