请考虑以下代码段:
class TypeCast{
public static void main(String[] args){
byte by = 4; //compiler casts int literal to byte
doCasting(4); //Compilation Error: external type casting is required. WHY ?
}
public static void doCasting(byte by){
}
}
Run Code Online (Sandbox Code Playgroud)
我认为上面的代码片段是不言自明的.在对int字体进行文字赋值时byte,编译器会自动执行所需的强制转换.当我们调用byte带有int literal参数的方法时,同样的事情不会发生.为什么?
Thread.currentThread()是一个静态方法,它提供对当前正在执行的Thread的引用(基本上是对'this'线程的引用).
this在Java中无法访问静态方法中的非静态成员(特别是),因此currentThread()是本机方法.
currentThread()方法如何在幕后工作?
考虑以下:
class TypeCast {
public static void main(String[] args) {
byte by = 4; // Compiler casts int literal to byte
int in = 4;
byte byt = in; // Compilation Error: compiler can not cast automatically. WHY?
}
}
Run Code Online (Sandbox Code Playgroud)
我知道编译器可以在文字赋值的情况下缩小范围.但是当赋值涉及变量而不是文字时,它不能做同样的事情.为什么?
编辑:我想大多数人都无法理解我想要问的问题.它不是要分配'超出范围'的值,而是分配'范围内'值byte并让编译器处理缩小范围.很明显,'byte'将无法处理超出范围的值,并且显式转换将需要(并且我不想知道).
给定值落在byte范围内,int文字赋值byte和int类型变量赋值之间的区别是什么byte?
请考虑以下声明:
byte by = 5; //works fine
文字'5'的类型为int,小到足以适合byte类型的变量.编译器在这里执行隐式类型转换(从int到byte).
现在考虑以下场景:
float fl = 5.5; //compilation error
Run Code Online (Sandbox Code Playgroud)
文字'5.5'是double类型,也足够小以适应float类型的变量.为什么我们需要像这样显式地输入:
float fl = (float) 5.5; //works fine
Run Code Online (Sandbox Code Playgroud)
为什么编译器在浮点数的情况下不为我们进行转换?