
java 不同类型间转换
System.out.println(""+c);只有当c是char数组是才可以和String并值计算得到地址?如果c是char变量就不行? 展开
问题1:
这个说法是不准确的,应该是任何基本数据类型,因为String这个对象比较特殊,其实,它也是对char型的“封装”,char也可以说是整数型的变量,因为JAVA用的是UNICODE编码,类如,char c=97 跟char o='a',这两个是相等的,char c=97,int i=c;这样语法也是对的,char的范围是0~255,对应的每个数值都有相应的字符,比如char c=98,则c='b',比如现在有个字符串String s="info",则对String的处理是这样的,java.lang.String 对象中的数据是一个字符数组,由管理和控制对字符数组的访问的
java.lang.String 对象封装。
所以当基本数据类型遇到String的时候,确切的讲是将其变为char型数组,然后交由String这个对象来管理和控制。所以也就是通常所说的“任何基本数据类型遇到String时,都会自动转换成String型”
问题2:
如1所言,只有基本数据类型才会自动转换为String,当数据类型是引用(类)或数组的时候,此时自动调用引用(类)或数组对象的继承自Object类的toString方法,如果没有覆写toString方法,则自动输出实例化对象的堆内存地址(当然这么说不一定准确,但是输出的一定是个内存地址)。
所以,你这两个问题归根到底就是一个问题。就是当遇到String类型的时候,基本数据类型(如,char,int,byte,short等)会转成String类型,引用(类)/数组会自动调用继承自Object类的toString方法,如果toString没有被覆写,则自动返回此实例化对象的堆内存地址。
关于这个问题我想你是不是指的是当使用String类型数据和其他类型数值类型数据进行相连接时(简单情况下通常使用 + 连接),如果是这样的话,那就是把数值类型转换为String类型和前面的String数据结果进行连接得到最终的String类型数据
至于System.out.println(""+c);只有当c是char数组是才可以和String并值计算得到地址?
不是如你所说,首先如果c是char类型数组,在java中仍让会把char数组出来成字符串和前面的字符串进行连接并输出最终结果,通常引用类型(char 数组就是引用类型)会把它描述为对象的字符串表示形式,如char数组会描述字符串形式类似于[C@1e5e2c3
输出引用不是就是地址??
不是地址,就是连接处理后的字符串而已
char[] ch=new char[2];
ch[0]='a';
char ch2='c';
System.out.println(str+1);//s1
System.out.println(str+ch[0]);//sa
System.out.println(str+ch2);//sc
这种问题就是要通过写程序来验证的。所以说当使用String类型数据和其他类型数值类型数据进行相连接时(简单情况下通常使用 + 连接),那就是把数值类型转换为String类型和前面的String数据结果进行连接得到最终的String类型数据。