关于Java变量问题

来源:百度知道 编辑:UC知道 时间:2024/05/23 15:02:16
int i;
char ch1=‘\n';
char ch2=ch1+1;(提示可能产生数据溢出,原因是否1默认为int型?)
int m=(int)ch1+i(提示错误,说i可能未初始化,但课本说未赋值则默认为0,问题何在?)
System.out.print(m+‘\n’)(‘\n'为转义符,但这里却是个值为10的数,为何?如何运用转义符?)

1.char ch2=ch1+1
答:1属于int型,ch1属于char型,int大于char型,所以char会被自动转换成int型参与运算,因此运算结果也是int型;而左边定义ch2为char型,小于int型,所以必须进行强制转换,综上,改为“char ch2=(char)(ch1+1);”

2.int m=(int)ch1+i提示i未被初始化
答:i提示未被初始化,没猜错的话,你应该是在main方法里面定义i的吧?局部变量是不会被自动初始化的,所以,要么在class体中定义成员变量i,要么就定义局部变量i时给它赋初值;

综上,改成以下就可以正常运行了:
public class wangyou {
static int i;
public static void main(String args[]){
char ch1='\n';
char ch2=(char)(ch1+1);
int m=(int)ch1+i;
System.out.print(m+'\n');
}
}
此时,输出结果为20,原因如下:
首先,ch1的值是换行符'\n',转换为int值后为10,所以由int m=(int)ch1+i得m等于10;
然后,m+'\n'中,因为m所属的int型大于'\n'所属的char型,所以后者被自动转换成int型参与运算(即为10),所以,输出结果就是20了(10+10)。

第一个问题就是会产生数据溢出,在Java里面byte,shot,数字,在运算是都会自动升级为int型,所以char ch2=ch1+1;ch1+1是int型的(包括ch1也变成了int型,即使它定义的是char型),
-----------------------------------------------------
第二个问题是你定义int i;是一定在main()方法或者类中定义的方法中定义的,这是一个