十一假期作业

int X=100;
        int Y=200;
        System.out.println("X+Y="+X+Y);
        System.out.println(X+Y+"=X+Y");

该段代码的输出结果:

原因:

在Java中,+有时是运算符,有时是连接符

  1)当左右两边连接的都是非数字型时,则为连接符。

  2)当一边是数值类型,另一边是非数值类型时,则为连接符。

  3)当两边都是数值类型时,则为运算符,即相加求和的作用

 

数据类型:内置、引用;

八种基本类型:6+1+1:6种数字类型,1种字符型,1种布尔型

1>byte   8位1字节,-128~127,

2>int   32位4字节 ,最小值是 -2,147,483,648(-2^31),最大值是 2,147,483,647(2^31 - 1)

3>Long  64位8字节,最小值是 -9,223,372,036,854,775,808(-2^63), 最大值是 9,223,372,036,854,775,807(2^63 -1)

4>float  单精度,32位

5>double  双精度 64位

6>short    16 位,最小值是 -32768(-2^15),最大值是 32767(2^15 - 1)

7>char  16 位 (Unicode编码) 最小值是 \u0000(即为0);  最大值是 \uffff(即为65,535);

结论:

1.整形到浮点型的数据类型转换会有精度损失

2.byte short int long float double 可以直接的相互转化(强转)

public class TestDouble {

    public static void main(String args[]) {
        System.out.println("0.05 + 0.01 = " + (0.05 + 0.01));
        System.out.println("1.0 - 0.42 = " + (1.0 - 0.42));
        System.out.println("4.015 * 100 = " + (4.015 * 100));
        System.out.println("123.3 / 100 = " + (123.3 / 100));
    }
}

运行结果:

结论:

double型的数值在相加减的时候,会将数值转换成二进制的数值如10001.10010110011这种表示发再做相加减,,但是在转换成二进制代码表示的时候,存储小数部分的位数会有不够的现象,即无限循环小数,这就是造成微差距的主要原因。

解决方法:

java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。

package second;
import java.math.BigDecimal;
public class t3 {
/*
 * 使用double类型的数值进行计算,    其结果是不精确的。
*java的设计者给编程人员提供了一个很有用的类BigDecimal,
*他可以完善float和double类无法进行精确计算的缺憾。
 */
//class static BigDecimalDemo {
    public static void main(String[] args){
        System.out.println(ArithUtil.add(0.01, 0.05));
        System.out.println(ArithUtil.sub(1.0, 0.42));
        System.out.println(ArithUtil.mul(4.015, 100));
        System.out.println(ArithUtil.div(123.3, 100));
    }
}

class ArithUtil{
    private static final int DEF_DIV_SCALE=10;

    private ArithUtil(){}
    //相加
    public static double add(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.add(b2).doubleValue();

    }
    //相减
    public static double sub(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.subtract(b2).doubleValue();

    }
    //相乘
    public static double mul(double d1,double d2){
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.multiply(b2).doubleValue();

    }
    //相除
    public static double div(double d1,double d2){

        return div(d1,d2,DEF_DIV_SCALE);

    }

    public static double div(double d1,double d2,int scale){
        if(scale<0){
            throw new IllegalArgumentException("The scale must be a positive integer or zero");
        }
        BigDecimal b1=new BigDecimal(Double.toString(d1));
        BigDecimal b2=new BigDecimal(Double.toString(d2));
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    }

 枚举类型:

public class EnumTest {
 
    public static void main(String[] args) {
        Size s=Size.SMALL;
        Size t=Size.MEDIUM;
        //s和t引用同一个对象?
        System.out.println(s==t);  //false
        //是原始数据类型吗?
        System.out.println(s.getClass().isPrimitive());//false
        //从字符串中转换
        Size u=Size.valueOf("SMALL");
        System.out.println(s==u);  //true
        //列出它的所有值
        for(Size value:Size.values()){
            System.out.println(value);
        }
    }
}
 enum Size{SMALL,MEDIUM,LARGE};

  1.运行下列代码可得注释后的结果,由此可以看出枚举的每个具体值都引用一个特定的对象,当引用的都为SMALL时,结果为true,则相同的值则引用同一个对象;

   2.第二显示表示枚举并不属于八个原始数据类型,是属于引用类型;

   3.第三个表示在枚举中可以直接使用“==”和equals()方法直接对比;

 

转载于:https://www.cnblogs.com/daisy99lijing/p/9751526.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值