java 数据类型的自动转换

String不是字符串类型的但我看到网上一个老师板书是这样的然后我的理解“与”是单字符因该用char,然后我就写了个如下结果然后我又改了过来StringV="与",但又有... String 不是字符串类型的但我看到网上一个老师板书是这样的

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

结果

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

结果

正确结果应该是如下

求高人指点前面两种错在哪里?
展开
 我来答
每天学点Java
2014-01-15 · TA获得超过5938个赞
知道大有可为答主
回答量:3547
采纳率:0%
帮助的人:1337万
展开全部

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==========================================


}
}
静听_一角
2014-01-15 · TA获得超过109个赞
知道答主
回答量:46
采纳率:0%
帮助的人:43.4万
展开全部
像这样的问题就要牵扯到java底层的知识,想理解为什么会这样有点困难难,你先记住结论规律,随着以后深入回头在研究java底层。暂时不要专越想越涉及到的东西越多。先记住结论
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
般若兮若
2014-01-15 · TA获得超过2706个赞
知道小有建树答主
回答量:1246
采纳率:0%
帮助的人:934万
展开全部
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类型的与
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bangpeng64233
2014-01-15 · 超过18用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:39万
展开全部
string的+的第一个操作数好像必须为string
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
巨人战舰
2014-01-15 · TA获得超过186个赞
知道小有建树答主
回答量:116
采纳率:0%
帮助的人:153万
展开全部

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

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

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

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

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

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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式