当前位置:首页 > 服务端 > JAVA中的类型转换

JAVA中的类型转换

JAVA中类型转换的基本原则在于,(布尔型除外,无法转换)低精确度或者说小范围的类型可以自动地转为高精度或者大范围的类型,反之则需要强制转换。如图所示,左边的类型可以自动转换为右边的类型(一般发生在与大范围的类型的运算中),反之则需要强制转换。

JAVA中的类型转换 _ JavaClub全栈架构师技术笔记

          图片来源(http://www.cnblogs.com/lwbqqyumidi/p/3700164.html)

 

如下题LeetCode 400. Nth Digit中,第七行会报错,可以看到count是long,len是int,两数相乘时len会自动变为long,而n是一个int值,把long类型赋给int类型就会报错。

public class Solution {
     public int findNthDigit(int n) {
        int len=1;
        long count=9;
        int start=1;
        while(n>len*count){
            n=n-len*count;  //这里会报错error: incompatible types: possible lossy conversion from long to int,因为没有进行long->int的强制转换

            len+=1;
            count=count*10;
            start=start*10;
        }
        start=start+(n-1)/len;
        String s=Integer.toString(start);
        return Character.getNumericValue(s.charAt((n-1)%len));
    }
}

 

有两种解决办法,第一是换成n-=len*count。 -=这种符号会自动地进行强制转换(+=,*=也是一样)。第二种方法是换成 n=(int)(n-len*count); 也就是加上强制转换。二者其实是一样的。

作者:shixueyuan
来源链接:https://www.cnblogs.com/shixueyuan/p/javatypeconvert.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/124762.html

分享给朋友: