首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • java 基础疑惑题.快来得分啦!!! [已结贴,结贴人:bobor_2008]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 19:56:36 楼主
    Java code
    Byte s = 45; System.out.println("s.toString().hashCode()"+s.toString().hashCode()); System.out.println("s.toString()"+s.toString()); System.out.println("s.hashCode()"+s.hashCode()); if (s.toString() == s.toString()) { System.out.println("s.toString");//为何此处不执行呢? }

    -------------------------------------------------------------------------------------------------

    等待中……………………………
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 19:59:161楼 得分:5
    s.toString()返回的是String 对象 

    java中对象的==操作是看两个对象是不是指向同一个地址,

    上面的函数运行的时候是生成新的字符串对象的,并不是在字符串对象池中拿的,,所以不相等

    要判断对象内容是不是相等 用 s.equles(obj)函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 20:04:532楼 得分:0
    那为什么
    Java code
    String a="abc"; String b="abc"; if(a==b){ System.out.println("true"); }


    这样就可以打印出true呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 20:05:253楼 得分:0
    我也知道判断对象内容是不是相等 用 s.equles(obj)函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 20:07:524楼 得分:0
    为什么

                 
    Java code
    String a="abc"; String b="abc"; System.out.println(a.hashCode()); System.out.println(b.hashCode()); if(a==b){ System.out.println("true"); }


    ----------------------------------------------
    为什么a的hashcode和b的hashcode相同呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anqini
    • 等级:
    发表于:2008-05-09 20:21:325楼 得分:2
    你觉得 new String(s) == new String(s)能返回true吗?
    呵呵!不都说了,给你留个想想的空间!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 20:26:136楼 得分:0
    Have you heard of "String Constant Pool" in Java?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 20:27:457楼 得分:0
    1 比较字符串用equals
    2 只有

    String str1 = "123";
    String str2 = "123";

    此时才会 str1==str2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 20:54:538楼 得分:0
    引用 1 楼 yriio 的回复:
    s.toString()返回的是String 对象

    java中对象的==操作是看两个对象是不是指向同一个地址,

    上面的函数运行的时候是生成新的字符串对象的,并不是在字符串对象池中拿的,,所以不相等

    要判断对象内容是不是相等 用 s.equles(obj)函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 21:09:349楼 得分:6
    true: String str1="hello"; String str2="hello"; System.out.println(str1==str2);
    str1和str2指向同一个对象,因为它们都是在对象池中拿到的

    false: String str3="hello" String str4=new String("hello"); System.out.println(str3==str4);因为在任何情况下,只要你去new一个String对象那都是创建了新的对象。


    在代码中直接判断两个实型数据是否相等,也采用以下方式来判断: if(Math.abs(a-b) <1e-5){ //相等 }else{ //不相等 }

    一楼的说的很对。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 22:38:4210楼 得分:0
    if里面是flase
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 22:42:2111楼 得分:0
    给你们说混乱了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 22:51:5712楼 得分:0
    引用 7 楼 java2000_net 的回复:
    1 比较字符串用equals
    2 只有
     
    String str1 = "123";
    String str2 = "123";
     
    此时才会 str1==str2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • AWUSOFT
    • 等级:
    发表于:2008-05-10 01:30:4313楼 得分:2
    当你直接用""给一String对像赋值时(String str="aa"),JVM会首先判断字符串池中有没有这个对像,如果有就直接返回,没有则创建.
    对于String的==是判断地址的(对像的首地址,记住:每一个引用变量本身的值都是它所引用的对像的首地址值.).

    所有
    String str="aa";
    String str2 = "aa";
    第一次str="aa";字符串池中没有"aa"对像,这时候创建并返回.第二次str2="aa"的时候,发现字符串池已经有了"aa"对像.所以直接返回,所以str与str2所引用的对像是同一个对像,也就是首地址相同.
    所以str==str2为true;


    主要理解:Java的字符串池概念
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-10 01:36:1914楼 得分:0
    引用 2 楼 bobor_2008 的回复:
    那为什么

    Java codeString a="abc";
            String b="abc";
            if(a==b){
                System.out.println("true");
            }


    这样就可以打印出true呢?

    因为a,b都是缓冲池中字符串abc的地址。也就是说a,b都是字符串abc的引用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mxd4037
    • 等级:
    发表于:2008-05-10 02:42:1215楼 得分:0
    这个问题可以分析下内存布局问题
    Stack Seg.
    Heap Seg.
    Date Seg.
    Code Seg.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ilrxx
    • 等级:
    发表于:2008-05-10 02:42:5416楼 得分:0
    引用 7 楼 java2000_net 的回复:
    1 比较字符串用equals
    2 只有

    String str1 = "123";
    String str2 = "123";

    此时才会 str1==str2
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 10:54:1917楼 得分:0
    麻烦给解释一句这句.

    我就这一句不是太清楚
    Java code
    if (s.toString() == s.toString()) { System.out.println("s.toString");//为何此处不执行呢? }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 11:32:2518楼 得分:0
    引用 1 楼 yriio 的回复:
    s.toString()返回的是String 对象 

    java中对象的==操作是看两个对象是不是指向同一个地址,

    上面的函数运行的时候是生成新的字符串对象的,并不是在字符串对象池中拿的,,所以不相等

    要判断对象内容是不是相等 用 s.equles(obj)函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lisl2003
    • 等级:
    发表于:2008-05-11 11:43:2619楼 得分:0
    1楼和9楼已经讲的很清楚了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 11:56:0220楼 得分:0
    引用 4 楼 bobor_2008 的回复:
    为什么

    Java codeString a="abc";
            String b="abc";
            System.out.println(a.hashCode());
            System.out.println(b.hashCode());if(a==b){
                System.out.println("true");
            }

    ----------------------------------------------
    为什么a的hashcode和b的hashcode相同呢?


    因为字符串的 hashcode 是根据其中每个字符的值计算得来的,
    如果两个字符串的值是相同的,那么这两个字符串的 hashcode
    必定相等。

    不过也需要注意的是如果两个字符串的 hashcode 相等,并不表
    示他们的值也相等。

    如果不嫌麻烦的话,可以看看 String 的 hashCode() 方法的
    API 文档,上面有具体的 hashCode 算法。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 11:58:1021楼 得分:0
    PS 一下:楼主的头像好漂亮哦~~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 12:08:1222楼 得分:0
    哦。。学习了。。。原来java是这样处理对象的。。。。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yuppy
    • 等级:
    发表于:2008-05-11 12:42:4123楼 得分:0
    引用 13 楼 AWUSOFT 的回复:
    当你直接用""给一String对像赋值时(String str="aa"),JVM会首先判断字符串池中有没有这个对像,如果有就直接返回,没有则创建.
    对于String的==是判断地址的(对像的首地址,记住:每一个引用变量本身的值都是它所引用的对像的首地址值.).

    所有
    String str="aa";
    String str2 = "aa";
    第一次str="aa";字符串池中没有"aa"对像,这时候创建并返回.第二次str2="aa"的时候,发现字符串池已经有了"aa"对像.所以直接返回,所以str与…

    学习;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 14:00:0124楼 得分:0
    http://www.blogjava.net/forgood/archive/2008/04/24/195625.html

    LZ自己去看看~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 14:05:5925楼 得分:0
    学习中!呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 17:22:5026楼 得分:0
    就算执行了也是显示s.tostring吧,你在显示的东西里是想显示s.tosting()的内容对吧,但是你用引号引着,那就是引号里是什么就显示什么了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 17:31:0027楼 得分:0
    ==操作符比较的是内存地址,toString()方法返回一个新生成的对象的地址,两次调用返回的是2个新的对象,分别在不同内存地址上。所以不相等。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 17:48:5328楼 得分:0
    3、9楼正解。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • 725137
    • 等级:
    发表于:2008-05-11 18:05:4929楼 得分:0
    toString后就产生了一个String对象.to一次产生一个,再to一次又产生一个。
    比较字符串内容相等用equals.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 18:12:1730楼 得分:0
    已经说的太清楚了!
    楼主要明白对象比较是什么意思
    你比较的是对象
    tostring()生成的是新对象
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 19:35:0731楼 得分:3

    s.toString()返回的是String 对象 

    java中对象的==操作是看两个对象是不是指向同一个地址,

    上面的函数运行的时候是生成新的字符串对象的,并不是在字符串对象池中拿的,,所以不相等

    要判断对象内容是不是相等 用 s.equles(obj)函数
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenhongxin
    • 等级:
    发表于:2008-05-11 19:54:5432楼 得分:0
    Byte s = 45;
            System.out.println("s.toString().hashCode()"+s.toString().hashCode());
            System.out.println("s.toString()"+s.toString());
            System.out.println("s.hashCode()"+s.hashCode());
            if (s.toString() == s.toString()) {
                System.out.println("s.toString");//为何此处不执行呢?
            }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-11 20:16:0433楼 得分:0
    凑个热闹,混脸儿熟!!!希望经常上来的朋友能记得我

    鞍山小宁^o^
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 16:58:0134楼 得分:0
    up
    修改 删除 举报 引用 回复