zoukankan      html  css  js  c++  java
  • java基础02 数据类型转

    一、回答问题
    float f1 = 6.66f;
    float f2 = (float) 6.67;

    f1==f2?

    /**
     * 
     * @author sun
     *
     */
    public class Demo {
    	public static void main(String[] args) {
    		float f1 = 6.67f;
    		float f2 = (float) 6.66;
    		System.out.println(f1-f2);
    		System.out.println(f1==f2);
    	}
    }
    

    输出:

    0.010000229
    false

    为什么会出现这种情况呢?f1!=f2呢?这时我们要知道,在Java中,

    整数默认是int类型,浮点数默认是double。
    长整数要加L或者l。
    单精度的浮点数要加F或者f。

    默认转换
    A:从小到大
    B:byte,short,char -- int -- long -- float -- double

    后者6.66是个double类型的,经过强制转换赋值给f2,会丢失精度,所以出现上述情况。

    二、下面的程序有问题吗,如果有,在哪里呢?
    byte b1 = 3;
    byte b2 = 4;
    byte b3 = b1 + b2;
    byte b4 = 3 + 4;

    b1+b2java中是自动转换成int型在计算值的 结果是int型的数据,不能自动转成byte,所以报错,需要强制转化为byte。
    三、下面的操作结果是什么呢?
    byte b = (byte)130;

    /**
     * 
     * @author sun
     *
     */
    public class Demo {
    	public static void main(String[] args) {
    		// 因为byte的范围是:-128到127。(-2^7--2^7-1)
    		// 我们需要使用强制类型转换
    		byte b = (byte) 130;
    		System.out.println(b);
    	}
    }
    

    输出:

    -126

     分析过程: 我们要想知道结果是什么,就应该知道是如何进行计算的。 而我们又知道计算机中数据的运算都是补码进行的。 而要得到补码,首先要计算出数据的二进制。
     A:获取130这个数据的二进制。 00000000 00000000 00000000 10000010 这是130的原码,也是反码,还是补码。
     B:做截取操作,截成byte类型的了。 10000010 这个结果是补码。 C:已知补码求原码。 符号位 数值位 补码: 1 0000010
    反码: 1 0000001
    原码: 1 1111110
     
    四、字符串参与运算

    /**
     * 
     * @author sun
     *
     */
    public class Demo {
    	public static void main(String[] args) {
    		System.out.println("hello"+'a'+1);
    		System.out.println('a'+1+"hello");
    		System.out.println("5+5="+5+5);
    		System.out.println(5+5+"=5+5");
    	}
    }
    

    输出:

    helloa1
    98hello
    5+5=55
    10=5+5

    字符串的拼接

     五、引用类型转换

            String name = "this is";
            Object object = name;
            name = object;//编译无法通过            

     为什么会出错呢?问题在于,String对象总是Object对象,但Object对象不一定是String对象。

     通过强制转换,编译即可通过。

    String name = "this is";
            Object object = name;
            name = (String) object;
  • 相关阅读:
    flex设置成1和auto有什么区别
    在SUBLIME TEXT中安装SUBLIMELINTER进行JS&CSS代码校验
    gulp教程之gulp-less
    sublime注释插件与javascript注释规范
    移动端尺寸基础知识
    webpack入门教程
    IO中同步、异步与阻塞、非阻塞的区别
    Node.js的线程和进程
    Cocos2d-x 3.0中 物理碰撞检測中onContactBegin回调函数不响应问题
    hdu 1789 Doing Homework again 贪心
  • 原文地址:https://www.cnblogs.com/sunTin/p/6614039.html
Copyright © 2011-2022 走看看