数据转换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;