JAVA—利用Math.random随机产生字母的问题

刚开始学JAVA。
看到一本书中有这样一段:
char c = (char)(Math.random() * 26 + 'a');
说可以随机产生字母。

不太明白啊
我知道Math.random() * 26 是产生一个[0,26)之间的double值,然后与‘a’进行字符串连接,根据运算符过载原理“如果将一个数值“加”到一个字串身上,会自动将那个数值(int,float等等)转换成字串,再进行连接。”
不是应该生成一个类似1.5a这样的字符串吗?
为什么是生成a~z之间的字母呢?

问题在哪里?请教!
谢谢各位。
明白了‘a’是char,不是string。
但是又有新的问题:
我查到说1—127兼容了ASCII码。是不是说如果如果1—127之间的数值强制转换为char时,会得到ASCII码对应的字母或其他?
那如果1~127之外的数值强制转换为char类型,会得到什么呢?

‘a’不是字符串哦,“a”这个才是字符串!
呵呵
char c = (char)(Math.random() * 26 + 'a');
这里面其实进行了一次系统默认的数据类型转换和一个强制类型数据类型转换
默认的数据类型转换也称为 隐式的数据类型转换
当然了 强制。。 称为 显式
首先 Math.random() * 26 + 'a' 这里面就进行了 隐式转换
Math.random() * 26 的结果 是0-26的double 那么就是一个double+char 的表达式 这个时候根据规则会从小数据类型默认的转换为大数据类型 然后进行计算
也就是说 0-26的一个double + 97.000000 那么它的结果当然也是一个double型 最后强制的将这个double型转为char型

总结: 小-大 隐式
大-小 显式

另外 显式的转换会丢失数据! 比如 double d=4.9; int i =(int)d;
到这里 你认识 i是多少? 想一下!

是4! 呵呵

字母对应以外的数字就会得到字母以外的字符
比如32 应该就是回车了
37 38 39 40 对应的← ↑ → ↓了

不过255以上得到的字符应该得到个垃圾值 因为char只能存放0-255的数据
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-16
'a'是char 不是string
当和char相加减时,其实是和它的ASCII码做运算
'a'的ASCII码是97
a~z在ASCII码中是连续的
所有'a'加上0-25就是小写的字母
第2个回答  2010-04-16
你好!Math.random()*26是产生一个 [0,26]之间的double值,
Math.random()*26+'a'的返回值也为double。然后再强制转为char类型。
因字符'a'的ascii值为97。
以此类推,b、c、d的ascii的值分别为98、99、100,则z的assic值正好就是'a'+26.

因此就会生成a~z之间的字母!
第3个回答  2010-04-16
这个很明显是数据类型转换时产生的疑问?
打个比方说'a'+1到底等于多少?
这里的'a'是char型1是你说的double型.这时候就要提到java中很有意思的东西了.
就是自动类型提升.char->byte->short->int->long->float->double
这里就可以看出来'a'被先转换成了数字与1相加,然后在(char)强制转换成了char型变成了字母b
第4个回答  2018-07-04
第一:“ ”双引号是字符串; ‘ ’单引号是字符. 两者是不一样的.
第二: ASCII 码了解一下 。 定义了 ‘a’~'z' 的十进制编码为:97~122; Uncode的值
\u0061~\u007A
第三: Math.random()*26 等于产生[0~26). 如果 (Math.random()*26+‘a’)等于
产生了[97~123)之间的随机数.
第四: 用强转 char ,转化为字符.[0~123)也就等价于[97~122]的字符. 也就是‘a’~'z'.
相似回答