A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

        String str = "HM程序员a";
                byte[] bys = str.getBytes("GBK");
                int num = 0;
                boolean blns = false; // 初始值 相当于阀门 决定了num的值
                for (int i = 0; i < 4; i++) {
                        if (bys[i] < 0 && !blns) { // 判断:中文字符转换了字节后 是为负整数的 && 取blns的相反值
                                blns = true;
                        } else {
                                num++;
                                blns = false;
                        }
                }
                System.out.println(num);

我的问题是
        if (bys[i] < 0 && !blns) 这个为什么可以成立,!blns的值不是一直都是false吗,那!blns就是true,怎么可能会走到这一步呢?这个条件应该是没办法进去的吧,可运行结果又是可以进去的,我哪里忽略了什么?

1 个回复

倒序浏览
由于String str = "HM程序员a";
byte[] bys = str.getBytes("GBK");数组第三个元素bys[2]的值<0(汉字为两个字节以负数形式存储)。即当for循环走到第三次时if括号内语句为true,就会执行blns=true这一语句。走到下一次循环时!blns为false就会走else语句,最终输出num为3
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马