碰到最奇怪的问题了!关于String 类的

日月小小 2009-09-10 12:20:21
getmes1=mes.Getmessage(serialport);
String getmess;
getmes2=to2.printHexString(getmes1.getbytes());
System.out.print(getmes2); //这里输出是01F19455120000240547122412500008FD599620034055F4B1F0157000000
getmes3=getmes2.substring(0,1);
System.out.print(getmes3);//这里居然是8
把getmes3=getmes2.substring(1,2)//输出居然是F了
奇怪了,这是什么问题?
...全文
366 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
日月小小 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 wxf8886 的回复:]
getmes1=mes.Getmessage(serialport);
String getmess;
getmes2=to2.printHexString(getmes1.getbytes());
System.out.print(getmes2);    //这里输出是01F19455120000240547122412500008FD599620034055F4B1F0157000000
加上这句,楼主就知道是怎么回事了
System.out.print(getmes2.toString());

getmes3=getmes2.substring(0,1);
System.out.print(getmes3);//这里居然是8

[/Quote]
问题依旧 toString() 用了 和没用一样
wxf8886 2009-09-16
  • 打赏
  • 举报
回复
getmes1=mes.Getmessage(serialport);
String getmess;
getmes2=to2.printHexString(getmes1.getbytes());
System.out.print(getmes2); //这里输出是01F19455120000240547122412500008FD599620034055F4B1F0157000000
加上这句,楼主就知道是怎么回事了
System.out.print(getmes2.toString());

getmes3=getmes2.substring(0,1);
System.out.print(getmes3);//这里居然是8
日月小小 2009-09-16
  • 打赏
  • 举报
回复
帖子顶下!
日月小小 2009-09-16
  • 打赏
  • 举报
回复
问题解决了,关键还是getmes1=mes.Getmessage(serialport);
这个方法里 用byte[]数组产生的问题。
日月小小 2009-09-16
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 wxf8886 的回复:]
getmes3=String.valueOf(getmes2).substring(0,1);
这句能打印出什么?还是一样的吗?
[/Quote]
getmes3=String.valueOf(getmes2).substring(0,1);
System.out.print(getmes3)//输出是08

晕了
wxf8886 2009-09-16
  • 打赏
  • 举报
回复
getmes3=String.valueOf(getmes2).substring(0,1);
这句能打印出什么?还是一样的吗?
wxf8886 2009-09-16
  • 打赏
  • 举报
回复
System.out.print(getmes2.toString());
这句打印出了什么?
日月小小 2009-09-15
  • 打赏
  • 举报
回复
顺便补充下,我发送数据帧要求返回10字节以内的数据没有那问题,要求返回10字节以上的数据就有这问题!
日月小小 2009-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 justinavril 的回复:]
如果我没理解错的话,楼主上面的代码等效于我的这段代码:
Java codeString str="1F19455120000240547122412500008FD599620034055F4B1F0157000000";

System.out.print(str.substring(0,1));
System.out.print(str.substring(1,2));
输出是:
Java code1F
没有任何问题
[/Quote]
这个我直接用也是没问题。我想可能和inputstream.available这个用法有关。
lxq137171010 2009-09-11
  • 打赏
  • 举报
回复
举个很简单的例子,你直接把一个对象打印出来能打印出来吗?能。看起来也像字符串形式的,但你能对这些字符串进行操作吗?不能。 楼主可以试着把对象打印出来,你就明白了。前提是不要重写toString方法
如下程序:
public class TestDemo {
public static void main(String[] args) {
TestDemo t = new TestDemo();
System.out.println(t);//输出TestDemo@de6ced
}
}

可能这样解释不妥,但意思大概就这样,希望楼主自己去理解,我的解释只能参照,属个人意见
DJBCAINIAO 2009-09-11
  • 打赏
  • 举报
回复
17楼正确,你可以toString一下
jayqean 2009-09-11
  • 打赏
  • 举报
回复
楼主再
getmes4=getmes2.substring(2,3);
System.out.println(getmes4);//看下打印是D?
lliiqiang 2009-09-11
  • 打赏
  • 举报
回复
解释起来很简单。因为传递过来的是地址,而你改变的是内部的变量的地址,而全局变量地址没有变
海川520 2009-09-10
  • 打赏
  • 举报
回复
String getmes2 = "01F19455120000240547122412500008FD599620034055F4B1F0157000000";
String getmes3=getmes2.substring(0,1);
System.out.print(getmes3);//这里是0
getmes3=getmes2.substring(1,2);//输出是1
System.out.println(getmes3);
我运行是没有问题
bb100044535 2009-09-10
  • 打赏
  • 举报
回复
没什么奇怪的,因为你这里输出的getmes2是十六进制码了,也就是hashcode了,而你用substring()实际上是对getmes2的字符串形式截取,并非对hashcode截取。
justinavril 2009-09-10
  • 打赏
  • 举报
回复
如果我没理解错的话,楼主上面的代码等效于我的这段代码:
String str = "1F19455120000240547122412500008FD599620034055F4B1F0157000000";

System.out.print(str.substring(0,1));
System.out.print(str.substring(1,2));

输出是:
1F

没有任何问题
xiaohuanjie 2009-09-10
  • 打赏
  • 举报
回复

实在想不通,LZ参考这里,也许有用


http://baike.baidu.com/view/1257753.htm
日月小小 2009-09-10
  • 打赏
  • 举报
回复
本来应该getmes3=getmes2.substring(0,1)是输出是0的,很奇怪。
angel6709 2009-09-10
  • 打赏
  • 举报
回复
母鸡
lxxzhy 2009-09-10
  • 打赏
  • 举报
回复
#14的同学,你就别再继续忽悠楼主了,他打印的是String,根本不是什么hashCode,你先看清楚楼主的代码再说吧.别给他添乱了.

至于楼主的问题,我也没有什么主意.
加载更多回复(9)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧