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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王德升 中级黑马   /  2012-6-24 18:56  /  2200 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王德升 于 2012-6-30 10:19 编辑

import java.util.*;
import java.io.*;

class PropertiesDemo
{
        public static void main(String[] args)
        {
                setAndGet();
        }

        public static void setAndGet()
        {
                Properties prop = new Properties();
        
                prop.setProperty("zhangsan","33");

                prop.setProperty("wangwu","22");

                //System.out.println(prop);

                String value = prop.getProperty("wangwu");
                Object obj = prop.setProperty("wangwu","99");
        
                System.out.println(obj);//怎么这里打印出来还是22呢?
               

                //System.out.println(value);

                Set<String> names = prop.stringPropertyNames();

                for(String s : names)
                {
                        System.out.println(s+":"+prop.getProperty(s));//为什么这里打印出来时99?
                }
        }
}


第二段代码:
class A
{
        public static void main(String[] args)
        {
                toHex(9);
        }
}

public static void toHex(int num)
        {
                char[] chs = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
               
                char[] arr = new char[8];
                int pos = arr.length;

                while(num!=0)//这里为什么要定义num!=0呢?
                {
                        int temp = num & 15;
                        
                        arr[--pos] = chs[temp];//这里pos的自减。

                        num = num >>> 4;

                System.out.println("pos="+pos);

                for(int x=pos;x<arr.length; x++)//这里x的范围。
                {
                        System.out.print(arr[x]+",");
                }

        }
}

老毕说的什么反过来,听的我头晕啊。麻烦大仙把这思路给我理下。谢谢了。

5 个回复

倒序浏览
本帖最后由 陈嘉宾 于 2012-6-24 19:23 编辑

第一个问题object接受了 String value = prop.getProperty的get方法所以打印的是22,你要set了obj也要有get方法啊,下面打印你的obj方法覆盖了  prop.setProperty("wangwu","22");
打印出来的就是zhangsan:33
wangwu:99

while(num!=0)//这里为什么要定义num!=0呢?。代表一个判断,取有效位,num碰到0就不执行了

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先明确set.property()方法的返回值是什么,从API上可以看出它返回的是set之前的旧值,要是以前没有值的话就返回空,所以 Object obj = prop.setProperty("wangwu","99");返回的是以前wangwu对应的value值

第二个问题 要知道底层数字在内存中的存在形式是字节码形式比如0000-0000-0000-0000-0000-0000-0000-0110表示的就是十进制的6,要转换成16进制运算你就要移位,你不停的往右移,总有时候数字会变成0,0的时候你还往右移不是浪费时间吗?所以前面要判断num!=0是为了节省时间,,不加也可以的

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报


由java的api可以看出,set.property()方法返回的是   set之前的旧值,,注意了是旧的值,所以Object obj = prop.setProperty("wangwu","99");,这个obj返回的是旧的值,而新的值99在这句代码之后,已经放进了表中了,
lz可以用一个  String value2 = prop.getProperty("wangwu");  来返回wangwu的值,这个value2值就是99了
注意看api文档,可以减少很多麻烦

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 陈淑飞 于 2012-6-24 20:30 编辑

一、

你能打印出来22?虽然没验证你的代码,但我表示怀疑。obj是Object对象的引用,是一块内存地址。你打印出来22?
二、

num!=0 是 while 循环终止条件, 0000-0000-0000-0000-0000-0000-0011-1100 表示十进制60的 二进制表示法。
1. 通过循环几次移位,就可移完搞定出各个16位进制的数呢。 当然两次循环就可以搞定这个60了。为了提高效率是不是要判断下,当循环N次后,有效数字num是不要要继续循环呢。所以啊,要写num!=0啊。

2.arr[--pos] = chs[temp];//这里pos的自减。搞个指针出来 完全是为了后面方便打印,比如上面的60,可直接打印出来3c。
通过循环外面pos被初始化为 arr.length就是8啦。那么第一次进循环体是,当然必须得先自减喽,arr[7],先把最低4位的4位二进制干掉转成一位十六进制。然后num再向右移4位后赋给给num,循环条件判断移位后num是否是0了。接着搞定下面的arr[6]了。....

3.for(int x=pos;x<arr.length; x++)//这里x的范围。 x初始化的值当然必须是pos啊,不然你想从x=0开始啊,whil循环中没赋值到的arr[1]..arr[5]默认0打印出来有意义吗? 为什么是pos,你可以读下循环体嘛。当循环结束时,pos指针指向了哪,拿上面的60来说吧。是不是pos被赋到了6啊,是不是最后一个被右移的有效十六进制啊。
所以啊,这里x,是不是只打印有效的16进制位啊。
这样写不就大大提高效率了啊。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈淑飞 发表于 2012-6-24 20:28
一、

你能打印出来22?虽然没验证你的代码,但我表示怀疑。obj是Object对象的引用,是一块内存地址。你打 ...

谢谢!   知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马