java 数据类型的自动转换

String 不是字符串类型的但我看到网上一个老师板书是这样的

然后我的理解“与”是单字符因该用char,然后我就写了个如下

结果

然后 我又改了过来String V="与",但又有新问题了如下

结果

正确结果应该是如下

求高人指点前面两种错在哪里?

String就是字符串类型

第一 char相加的结果是int类型,不能赋值给String

第二 A+B的结果是int类型,再加上String,请应用int+String的规则

第三String+char+char,请应用char+String的规则

package org.xyz;

public class Test{
public static void main(String[] args) {
String V = "与";
char A = '男';
char B = '女';
// String s = A + B;//错误 A+B的结果是int,int不能赋值给String
int i = A + B;//正确,在java中char和byte是可以转换为十进制的 A+B的结果是int类型的
System.out.println(i);
String sum2 = i + V;//正确 字符串可以跟任意的基本类型相加 下面有证明
System.out.println(sum2);
String sum = A + B + V;//A+B的结果是int类型的,然后再加V  A+B是char+char结果是int,字符串可以跟任意的基本类型相加
System.out.println(sum);
//===================String begin================================================================================
//八种基本类型String都可以跟它们进行相加,没有任何问题
boolean boo = true;
sum2 = boo + V;

double d = 10.0;
sum2 = d + V;

float f = 10.0f;
sum2 = f + V;

byte b = 'A';
sum2 = b + V;
//char
sum2 = A + V;

short sr = 10;
sum2 = sr + V;

long l = 10;
sum2 = l + V;

int i10 = 10;
sum2 = i10 + V;
//===================String end================================================================================
}
}

字符串跟基本类型相加的结果

package org.xyz;
/**
 * 除了byte是转换称ACII码的值之后再跟字符串相加其他没有任何例外 
 *
 */
public class Test{
public static void main(String[] args) {
String str = "中";
String str2 = "";

boolean bl = true;
str2 = "";
str2 = bl + str;
        System.out.println(str2);//true中
        
float f = 10.0f;
str2 = "";
str2 = f + str;
        System.out.println(str2);//10.0中
        
double d = 10.0;
str2 = "";
str2 = d + str;
        System.out.println(str2);//10.0中
        
int i = 10;
str2 = "";
str2 = i + str;
        System.out.println(str2);//10中
        
        
short s = 10;
str2 = "";
str2 = s + str;
        System.out.println(str2);//10中
        
        
byte b = 'c';
str2 = "";
str2 = b + str;
        System.out.println(str2);//99中
        
        
char c = 'c';
str2 = "";
str2 = c + str;
        System.out.println(str2);//c中
        
long l = 10;
str2 = "";
str2 = l + str;
        System.out.println(str2);//10中

}
}

 基本类型相加的规律


package org.xyz;

/**
 * 
 * 任意基本类型都是可以相加了,除了跟boolean,boolean跟任何基本类型都不能相加,包括自身
 * 可以相加的基本类型相加之後的结果一定是int float long double类型(有short参与并且另一个参数不大与short类型的结果都是int)
 */
public class Test{
public static void main(String[] args) {

char c = 'c';
byte b = 'b';
int i = 1;
long l = 10;
float f = 10.0f;
double d = 10.0;
short s = 10;
boolean bl = true;


//===================char begin==========================================
//char不可以跟boolean相加
i = c + c;//char + char = int
i = c + b;
i = c + i;
f = c + f;
d = c + d;
i = c + s;
l = c + l;
// i = c + bl;
//===================char end==========================================

//===================byte begin==========================================
//char不可以跟boolean相加
i = b + c;//char + char = int
i = b + b;
i = b + i;
f = b + f;
d = b + d;
i = b + s;
l = b + l;
// i = b + bl;
//===================byte end==========================================

//===================int begin==========================================
//char不可以跟boolean相加
i = i + c;//char + char = int
i = i + b;
i = i + i;
f = i + f;
d = i + d;
i = i + s;
l = i + l;
// i = i + bl;
//===================int end==========================================

//===================long begin==========================================
//char不可以跟boolean相加
l = l + c;//char + char = int
l = l + b;
l = l + i;
f = l + f;
d = l + d;
l = l + s;
l = l + l;
// l = l + bl;
//===================long end==========================================

//===================float begin==========================================
//char不可以跟boolean相加
f = f + c;//char + char = int
f = f + b;
f = f + i;
f = f + f;
d = f + d;
f = f + s;
f = f + l;
// f = f + bl;
//===================float end==========================================

//===================double begin==========================================
//char不可以跟boolean相加
d = d + c;//char + char = int
d = d + b;
d = d + i;
d = d + f;
d = d + d;
d = d + s;
d = d + l;
// d = d + bl;
//===================double end==========================================

//===================short begin==========================================
//char不可以跟boolean相加
i = s + c;//char + char = int
i = s + b;
i = s + i;
f = s + f;
d = s + d;
i = s + s;
l = s + l;
// i = s + bl;
//===================short end==========================================

//===================boolean begin==========================================
// i = bl + c;
// i = bl + b;
// i = bl + i;
// f = bl + f;
// d = bl + d;
// i = bl + s;
// l = bl + l;
// i = bl + bl;
//===================boolean end==========================================


}
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-15
像这样的问题就要牵扯到java底层的知识,想理解为什么会这样有点困难难,你先记住结论规律,随着以后深入回头在研究java底层。暂时不要专越想越涉及到的东西越多。先记住结论
第2个回答  2014-01-15
A跟B都是char类型,也就是基本数据类型.它们在进行加法的时候是拿着底层的unicode编码进行数学运算.52906实际上就是char类型的男跟char类型的女的unicode编码的和.然后这个值再去跟String字符串与进行加法的时候是进行追加操作,因此就是52906与.
后面那个因为是先用与跟A进行加法,所以把A转换成String类型的了,所以与跟男直接进行追加操作变成与男,这是个String类型了然后再跟女加法就相当于是与男这个String字符串跟char类型的女所以又是追加最后变成与男女了.
第一个的错误是因为三个都是char字符,所以在进行加法的时候会变成int数,那么最后得到一个int数想要赋值给String是不行的,在最后加一个""转成String就可以了.
你的最后一个如果是V+(A+B)的话就是与52906了,因为先计算两个char的和.追问

“与”为什么是字符串喃,用Strring 而不用char ?

追答

因为你写的与是用的双引号所以是字符串.
String str = "与";//这是字符串的与
char c = '与';//这是char类型的与

本回答被网友采纳
第3个回答  2014-01-15
string的+的第一个操作数好像必须为string
第4个回答  2014-01-15

这么说吧,char在Java内部都是作为Unicode编码处理的,四位十六进制数

+号既可以作为加法也可以连接字符串,仅当两个操作数都不是String类型时才是加法,所以:

    三个Unicode数相加得到一个int类型然后赋给String,报错

    A+B得到一个数52906,与String相连接返回 数字+字符串

    先执行V+A,当成字符串处理,再+B,也返回字符串

    楼主对学习抱有质疑精神非常值得学习,不使用IDE工具可以使学习更加全面,望继续加油!

相似回答