数据转换java
这些声明有效吗数据转换java,java,Java,这些声明有效吗 char c='c'; int i=10; double d =50; long l=30; String s="Goodbye"; 有人能解释一下转换数据类型的逻辑吗?是、否、否,除非您显式执行类型转换。如果您编写一个简单的main方法,编译它,然后执行它,您可能已经看到了这一点——这些问题应该由编译器来识别 这很好地解释了它。s+=i将s和字符串10连接起来,这等于s+=Integeri.toString i+=s认为这不起作用,类型不兼容 c+=s也不应该编译相同、不兼容
char c='c';
int i=10;
double d =50;
long l=30;
String s="Goodbye";
有人能解释一下转换数据类型的逻辑吗?是、否、否,除非您显式执行类型转换。如果您编写一个简单的main方法,编译它,然后执行它,您可能已经看到了这一点——这些问题应该由编译器来识别
这很好地解释了它。s+=i将s和字符串10连接起来,这等于s+=Integeri.toString i+=s认为这不起作用,类型不兼容 c+=s也不应该编译相同、不兼容的类型 c=c+c的ascii值应该加上10,我猜c将成为“c”=>“m”之后的第10个字母 编辑。所以在最后一种情况下,您必须将i强制转换为char以使其编译
s+=i;
i+=s;
c+=s;
c=c+i;
这本书又长又详细。你为什么不试一试呢:
char c='c';
int i=10;
double d =50;
long l=30;
String s="Goodbye";
s+=i; // legal :)
i+=s; // not legal :( The operator += is undefined for the argument types int, String
c+=s; // not legal :( The operator += is undefined for the argument types char, String
c=c+i; // not legal :( Type Mismatch: cannot convert from int to char
编辑
悠久的历史
基本上,java中的所有类型都有一个形状,如果你想这样称呼它,那么我将这样称呼它,作为这个答案
对于基本数据类型boolean、byte、short、char、int、float、long、double,形状是它使用的字节大小或位大小,这里1字节=8位:
bash-3.2$ cat ConveraionTest.java
public class ConvertsonTest {
public static void main( String [] args ) {
char c='c';
int i=10;
double d =50;
long l=30;
String s="Goodbye";
//Are these statement valid?
s+=i;
i+=s;
c+=s;
c=c+i;
}
}
bash-3.2$ javac ConversionTest.java
ConversionTest.java:12: incompatible types
found : int
required: java.lang.String
i+=s;
^
ConversionTest.java:13: incompatible types
found : char
required: java.lang.String
c+=s;
^
ConversionTest.java:14: possible loss of precision
found : int
required: char
c=c+i;
^
3 errors
您不能将字符串赋给int。您将如何分配?内容会放在哪里?它们的形状不同,甚至不兼容
字符串到字符也是如此
现在,您可以将int32位分配给char16位或short16位,问题是,例如,如果该值大于16位131 071
您将丢失不适合16位的位。这就是为什么会出现此错误:
ConversionTest.java:13: incompatible types
found : char
required: java.lang.String
c+=s;
^
但是,如果您确定它适合例如int i=65;这当然适合16位,你可以像这样施放它:
ConversionTest.java:14: possible loss of precision
found : int
required: char
c=c+i;
按照您告诉编译器的方式强制转换:
嘿,我是这里的程序员,我知道我在做什么。有两种类型的转换:扩大转换和缩小转换。允许扩大转换,Java将为您处理,但不允许缩小转换。加宽转换意味着将较小的值(如int 32位)转换为较大的值(如long 62位)。必须明确地缩小相反方向的转换范围
int i = 65;
char c = ( char ) i;
将要求将int转换为允许的字符串
s+=i;
将要求将字符串转换为不允许的int。+=运算符将转换为
i+=s;
i+s将返回一个不能分配给int的字符串
i = i + s;
这是不允许的,原因与c+s返回您试图分配给字符的字符串类似
c+=s;
还将给出错误,因为c+i将导致int 32位,而将其分配给char 16位可能会导致精度损失
您尝试的每一个操作实际上都是可能的,但是您必须明确地告诉Java您想要执行这些操作,并接受其后果。尽管如此,混合类型的操作在纯粹的硬编程领域是不受欢迎的,因为存在可能导致问题的边缘情况
i = i + s;
c+=s;
c=c+i;