精华内容
下载资源
问答
  • 隐含强制类型转换:顾名思义,看不见的强制类型转换,关于这个问题,我们先来读懂一句话: byte b =3; 我们知道一个整数的默认类型int类型,没错3是int类型,当把3赋值给b的时候,其实默认有一个强制类型转换,...

             隐含强制类型转换:顾名思义,看不见的强制类型转换,关于这个问题,我们先来读懂一句话:

             byte b =3;

             我们知道一个整数的默认类型int类型,没错3是int类型,当把3赋值给b的时候,其实默认有一个强制类型转换,编译器判断3在byte类型的范围之内,强制把3转换成了byte类型,然后赋值给了b。所以这就被称作隐含强制类型转换,下面我们来看一个简单的问题:

                                                                                                                               

            

             如图:上面两段代码的目的是一样的,要把10赋值给byte类型的b,但是结果是图一正确运行,图二报错。为什么呢?

             图一:b=3+7;等号右边的是常量,编译器先计算表达式的结果为10,判断10在byte类型的范围之内,于是就把int类型的值强制转换成byte类型赋给b;

             图二:b=b1+b2; 等号右边是两个变量,但是变量的值是不确定的。编译器无法判断是否超出了byte类型的取值范围,没办法进行强制类型转换,所以出现如图所示的提示:从int转换到byte可能会有损失(如果超出范围,会丢失高位)。

            知道原因之后,我们尝试把byte改成short类型结果也是一样的:

           

         但是我们改成int类型;

        

       输出结果10,是能够运行的,因为int是默认类型,所以不存在隐含强制类型转换的问题,所以编译当然不会报错。

       那么问题又来了:
            short b=3;              与               short b=3;  
            b+=2;                                         b=b+2;

          的区别:

          b+=2是可以编译成功的。+=也是一个赋值运算符,在底层是一个动作并且有一个强制转换的一个过程(不用我们自己强转);

          但是b=b+2;不能编译成功,这是两个动作,先求和再赋值,求和时b自动类型提升,求和结果是int类型,但是因为编译器无法判断数值大小,所以无法为我们强制转换类型,所以编译报错:

         

         虽然我们可以自己写强制转换,但是可能的结果编译器已经告知,可能会丢失精度。

         即   b=(short)(b+2);  总结,如果等号左右两边的类型不匹配:

        (1)如果右边是常量,编译器会判断数值大小是否在范围内,如果在就做强制类型转换,不在就报错;

        (2)如果右边是变量,编译器无法判断数值大小,不会做强制类型转换,会报错(可以自己强制转换);

        (3)+=,-=,*=,/=,%=赋值运算符不管是否在范围内都会做强制类型转换。

        (*^__^*) ——END

    转载自: https://blog.csdn.net/pt666/article/details/70471003
    展开全文
  • 我们知道从小的数据类型转到大数据类型是隐式转换, 反之是强制类型转换。今天强调一个隐含的强制类型 转换,同时加深自己的印象。话不多说,看代码: ...//这种隐含了自动强制类型转换,其实是x=(int)(x+3...

    标题隐含的强制类型转换

    我们知道从小的数据类型转到大数据类型是隐式转换, 反之是强制类型转换。今天强调一个隐含的强制类型转换,同时加深自己的印象。话不多说,看代码

    public class Add {
        public static void main(String[] args) {
            int x=3;
            x+=3.5;
    //这种隐含了自动强制类型转换,其实是x=(int)(x+3.5)
            int y=3;
    //        y=y+3.5;
    //这个时候会出现编译异常,必须手动强制转换
            y=(int)(y+3.5);
            System.out.println(x);//
            System.out.println(y);
        }
    }
    
    展开全文
  • 自动类型转换 整型、实型(常量)、字符型数据可以混合运算。 运算中,不同类型的数据先转化为同一类型,然后进行运算。 转换从低级到高级。 低 ------------------------------------> 高 byte,short,char—>...

    自动类型转换
    整型、实型(常量)、字符型数据可以混合运算。

    运算中,不同类型的数据先转化为同一类型,然后进行运算。

    转换从低级到高级。

    低 ------------------------------------> 高

    byte,short,char—> int —> long—> float —> double

    数据类型转换必须满足如下规则:

    1. 不能对boolean类型进行类型转换。

    2. 不能把对象类型转换成不相关类的对象。

    3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。

    4. 转换过程中可能导致溢出或损失精度,例如:int i =128; byte b = (byte)i;因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

    5. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:(int)23.7 == 23; (int)-45.89f == -45自动类型转换必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。

    实例

    public class ZiDongLeiZhuan{
            public static void main(String[] args){
                char c1='a';//定义一个char类型
                int i1 = c1;//char自动类型转换为int
                System.out.println("char自动类型转换为int后的值等于"+i1);
                char c2 = 'A';//定义一个char类型
                int i2 = c2+1;//char 类型和 int 类型计算
                System.out.println("char类型和int计算后的值等于"+i2);
            }
    }
    

    运行结果为:

    char自动类型转换为int后的值等于97

    char类型和int计算后的值等于66

    解析:c1 的值为字符 a ,查 ASCII 码表可知对应的 int 类型值为 97, A 对应值为 65,所以 i2=65+1=66。

    强制类型转换

    1. 条件是转换的数据类型必须是兼容的。

    2. 格式:(type)value type是要强制类型转换后的数据类型

    实例:

    public class QiangZhiZhuanHuan{
        public static void main(String[] args){
            int i1 = 123;
            byte b = (byte)i1;//强制类型转换为byte
            System.out.println("int强制类型转换为byte后的值等于"+b);
        }
    }
    

    运行结果:

    int强制类型转换为byte后的值等于123

    隐含强制类型转换

    1、 整数的默认类型是 int。

    1. 小数默认是 double 类型浮点型,在定义 float 类型时必须在数字后面跟上 F 或者 f。
    展开全文
  • 复合赋值运算符其中隐含了一个强制类型转换。 byte、short、char在参加运算时结果值会自动转向int byte num1 = 12; byte num2 = 14; num1 += num2; // num1 自动转换为 int num1 = num1 + num2; // 错误 第三行...

    复合赋值运算符其中隐含了一个强制类型转换。
    byte、short、char在参加运算时结果值会自动转向int

    byte num1 = 12;
    byte num2 = 14;
    num1 += num2;  // num1 自动转换为 int
    num1 = num1 + num2; // 错误 
    

    第三行代码可以运行,因为复合运算自动把num1转换为int型
    第四行代码不可以,因为byte、short、char在参加运算时结果值会自动转向int。而此时的num1没有转型

    展开全文
  • 强制类型转换

    2019-07-29 09:53:44
    对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围,那么javac编译前将会自动隐含的为我们不上一个强制类型转换 如果没有超过左侧范围,编译器补上强转 如果右侧超过左侧范围,那么编译前报错 ...
  • 记住核心原则--C语言里面的强制类型不改变内存数据。 比如我们可以(int)'A',这样转换后的结果为A的ASCII码数值,因为那块内存本来就存的那个数,只是换个形式使用而已。 知道上面的原则,我们可以对任何...
  • c++强制类型转换笔记

    2017-12-11 12:02:37
    强制类型转换类型转换是有风险的! 损失精度 越界 。。。 类型转换运算符 老的类型转换的方式: 类型转换操作符(type conversion operator)是一种特殊的类成员函数, 它定义将类类型值转变为其他类型值的...
  • 小知识: += ,-= ,*= , /= , %=中都隐藏有强制类型转换
  • /*强制类型转换:1....2. 复合赋值运算符,其中也隐含了一个强制类型转换。3. 编译器的常量优化如果一个表达式当中全都是常量,那么编译的时候(javac)会直接计算出来结果,不会等到运行的时候再计算。*.java ...
  • c++强制类型转换

    2014-02-10 21:04:27
    强制类型转化最终还是被c++接受了。  1. static_cast运算符号  static_cast(e),stroustrup让我们可以把它看成隐含转换的显示的逆运算。这个是有一定道理的,基于隐式转化的对象类型我们可以使用static_cast...
  • c++ 强制类型转换

    千次阅读 2018-09-12 23:33:43
    在C++语言中,如果类从包含虚函数的基类派生,则指向基类类型的指针可用于调用派生类对象中包含的虚函数的实现。 包含虚函数的类有时被称为“多态类”。 由于派生类完全包含它派生自的所有基类的定义,因此在类层次...
  • Java常考面试题4--Java强制类型转换

    千次阅读 2017-02-08 16:54:04
    强制转换
  • C++强制类型转换

    2010-01-07 16:45:00
    http://hi.baidu.com/joyjjjz/blog/item/6339d5cadb443142f31fe73a.htmlC++类型强制转换四种类型可能很多人都常常忽略就象我一样,但是有时还是比较有用的。不了解的建议看看,一些机制我也不是十分了解,只是将一些...
  • 强制类型转换操作符

    千次阅读 2010-01-20 21:17:00
    操作符中文名称含义 dynamic_cast动态类型转换符支持多态而存在, 主要用于类之间的转换 static_cast静态类型转换符仅仅完成编译时期的转换检查 reinterpret_cast再解释类型转换符完成不同类型指针之间的相互转换...
  • C++中强制类型转换一个有以下四种符号: 1. static_cast运算符号 static_cast(e),stroustrup让我们可以把它看成隐含转换的显示的逆运算。这个是有一定道理的,基于隐式转化的对象类型我们可以使用static_cast转化...
  • * 面试题 short s=1, s = s+1;  short s=1, s+=1; 上面两个代码有没有问题,如果有,那里有问题 第一个有问题: ...默认提升byt,short,char-->int-->long-->float-->double: ...必须强制类型转换
  • 问题:  short s1=1;s1=s1+1;有什么错?  short s2=1;s2+=1;有什么错?  long l1 = 1;l1 = l1+1;... 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将
  • //也就是相当于100 是Int类型 但是我们并没有做强制类型转换,就可以直接赋值给num num的类型是byte类型, 针对这个问题作出如下解释。 package com.hblg.day02; /** * @author i * @create 2019/9/3 21:10 ...
  • short s1 = 1; s1 = s1 + 1; short s1 = 1;...对于前者,因为1是int类型,因此s1+1运算结果也是int型,需要强制转换类型才能赋值给short型。...相当于 s1 = (short)(s1 + 1),隐含强制类型转换 ...
  • Java数据类型转换

    2017-01-08 08:08:28
     Java中数据类型转换包括了三种情况:自动类型转换、强制类型转换、隐含强制类型转换。  整型、实型(常量)、字符型数据可以混合运算,运算中,不同类型的数据先转化为同一类型,然后进行运算。  转换从低级到...
  • Java_数据类型转换

    2021-08-25 20:59:10
    文章目录Java_自动类型转换Java_强制类型转换Java_隐含强制类型转换 Java_自动类型转换 自动类型转换:整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。 低 -...
  • 本文通过一个简单的例子,剖析不同数据类型的存储结构、运算相互转换转换中可能出现的问题—溢出,提出避免发生溢出的办法,目的是在教学和实践中得到正确结果。
  • 基本数据类型转换

    2018-02-18 18:00:48
    研究问题: 基本数据类型中数值类型的自动类型提升?...双目运算符隐含强制类型转换符 byte a=3,b=4; a=(byte)(a+1)//等同于a+=1; 截图展示区: 1. package com.corn.testcast; ...
  • 在有隐式类型转换的表达式中,不需要明确指定一个类型的对象该转换为另外哪一个类型,这个工作将隐含地由编译器来完成,编译器将分析表达式的含义,进行类型转换。 隐式类型转换针对不同的类型有不同的转换方...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,489
精华内容 10,995
关键字:

隐含强制类型转换