Java十进制转8位二进制代码疑问:移除某行后星号数量变化原因
为什么移除
result+=0;后星号数量变成7个? 嘿,我来帮你捋清楚这个问题的根源!核心原因其实很直白:result+=0;这行代码会实时修改result字符串的长度,而你的星号打印逻辑正好依赖result的当前长度来计算打印次数。
咱们一步步拆解细节:
- 先看
result+=0;的本质:在Java里,当你把int类型的0和字符串result做拼接操作时,0会被自动转成字符串"0"并追加到result末尾,这会直接让result的长度增加1。 - 结合你给出的注释片段
// int j=8-result.length(); // for(int i=0;i,能明显看出来你原本的星号打印逻辑是:先计算8 - result.length()得到要打印的星号数量,再循环打印对应次数的*。 - 对应你的运行结果:
- 保留
result+=0;时,result执行完拼接后长度变成了4,8-4=4,所以输出4个星号; - 移除这行后,
result回到初始的二进制字符串长度1,8-1=7,自然就打印出7个星号了。
- 保留
补充个小建议:你提到result的长度会实时更新,要是你希望星号数量不随result的后续修改而变化,可以提前把初始长度存到变量里,比如:
// 提前保存初始二进制字符串的长度,避免后续修改影响星号数量 int initialLen = result.length(); int starCount = 8 - initialLen; for(int i=0; i < starCount; i++){ System.out.print("* "); }
这样不管你后续有没有result+=0;这类修改操作,星号数量都会稳定基于初始长度计算啦。
内容的提问来源于stack exchange,提问作者Ihab Khaled Shhadat
相关产品推荐
相关产品推荐

