java中怎么获取变量的地址? java中怎么获取变量的地址,比如 int a=5;我如何打印出a的地址? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 a 的地址不属于 java 的范畴。 Java好像没这方面的功能,而且好像在极力避免这件事! java的一大特点是取消了程序员直接操作指针,所以即使你拿到了地址也没用 JAVA里程序员虽然不能直接操作指针,但是JAVA里到处都是引用(指针) 你不能操作他 但是必须理解内存 Integer.toHexString(super.hashCode())就是调用Object的hashCode可以得到对象的地址。基本类型和字符串池地就不知道了。不过拿到了能干什么呢? hashCode 只是一个标识,跟内存位置一点关系都没有。况且基本型别连 hashCode 都没有,不也照样有个地址? 一般都不会用到变量的地址,在JAVA中 JAVA没有这方面的东西吧。。持续关注中!!! Java不允许程序员管理内存,内存地址对Java程序员来说是透明的,无意义的。 基本类型是存在栈中的,java无法获取其地址 hashCode 只是一个标识,跟内在位置没关系 no way! java不支持这个,是隐藏的。不会让你直接看到的。 InetAddress localhost = InetAddress.getLocalHost(); System.out.println ("localhost: "+localhost.getHostAddress()); System.out.println ("localhost: "+localhost.getHostName()); 其实这正是c和Java的区别,c中必须明白指针的地址,而java中则是避免了这个问题,不用程序员特地操作 JAVA中不可能打印出地址,因为它禁止了对内存的访问,不可能获得地址。 JAVA纯面向对象估计就体现在不能获得内存地址吧 比较困难,生成javacore,然后去找吧。 但是有一种方法可以比较String和StringBuffer的变量在内容改变后的是不一样的:代码如下: String str1="学海无涯苦作舟"; System.out.println("String 的 str1的hascode"+str1.hashCode()); str1=str1+"人间正道是沧桑"; //注意此str1的存储地址已发生变化 System.out.println("String 的 str1的hascode"+str1.hashCode()); System.out.println(str1); StringBuffer sb1=new StringBuffer("弟子规"); System.out.println("StringBuffer 的 hascode:"+sb1.hashCode()); StringBuffer sb2=sb1.append("圣人教"); //注意sb1和sb2指向同一个地址 System.out.println("添加字符串后StringBuffer 的 hascode:"+sb2.hashCode()); sb2.insert(6,"海纳百川"); System.out.println("sb1="+sb1); System.out.println("sb2="+sb2); 运行结果:String 的 str1的hascode-2054942391String 的 str1的hascode895667206学海无涯苦作舟人间正道是沧桑StringBuffer 的 hascode:26954214添加字符串后StringBuffer 的 hascode:26954214sb1=弟子规圣人教海纳百川sb2=弟子规圣人教海纳百川弟子规圣人教海纳百川2.718281828459045规可以看出str1的前后hascode值变了,而sb2的值没有改变 需要注意的是hascode 不能与堆栈中的内存地址等价理解,我认为变量的tohexstring()方法可以替代内存地址理解 一句话,java无法直接获取变量或对象的地址值。 hashCode 看起来象地址,所以某些人就干脆把它当作地址了 hashCode都可以复写,内存怎么办? java 指针不是只在内部存在,对外没有表现吗? 是否可以将其转换为Object类型。改写toString()方法,看能不能得到.菜鸟,呵呵! 如果想玩内存和指针的话,你应该去学习C而不是java。 楼主不是搞java 的吧 如果是 应该知道这是不行的 以前学C, 刚接触java。求教:byte a = (byte)0x01;byte b = (byte)0x02;char c = (char)a;强制转换后c=?java的强制转换是怎样实现的,在C里如果a,b地址连续,c读出的值可能是0x0102.在java里我想测试一下,测试后的结果是0x01。所以我想得到a,b的地址看他们是不是连续的。 已经回复了你的帖子http://topic.csdn.net/u/20120426/12/b8e02f1a-da8a-418c-8b9a-0f2d5cb4b90f.html 肯定是无法取到的,亲~~~java不管理直接对内存进行管理不要相信hashCode,这函数压根就是可以自己重载,和地址没有关点关系 此贴必火啊LZ以前是学C的啵 JAVA多线程同步,输出为什么会有问题。。。。 求帮助 用httpclient的下载网页乱码? 数据库连接有问题! 求助!java虚拟机问题 新手提问 请教高手 JTextField的奇怪问题,谢谢各位了 求助 小程序? 请如何从一个中文字符串中找到某个汉字的index值? 要求抛出异常,应该如何写? 如何用JAVA调用操作系统的命令呢? 更新数据库--怎么实现下面的代码--初学者请指教 这道android程序为什么出错?
就是调用Object的hashCode可以得到对象的地址。
基本类型和字符串池地就不知道了。
不过拿到了能干什么呢?
System.out.println ("localhost: "+localhost.getHostAddress());
System.out.println ("localhost: "+localhost.getHostName());
代码如下:
String str1="学海无涯苦作舟";
System.out.println("String 的 str1的hascode"+str1.hashCode());
str1=str1+"人间正道是沧桑"; //注意此str1的存储地址已发生变化
System.out.println("String 的 str1的hascode"+str1.hashCode());
System.out.println(str1);
StringBuffer sb1=new StringBuffer("弟子规");
System.out.println("StringBuffer 的 hascode:"+sb1.hashCode());
StringBuffer sb2=sb1.append("圣人教"); //注意sb1和sb2指向同一个地址
System.out.println("添加字符串后StringBuffer 的 hascode:"+sb2.hashCode());
sb2.insert(6,"海纳百川");
System.out.println("sb1="+sb1);
System.out.println("sb2="+sb2);
运行结果:
String 的 str1的hascode-2054942391
String 的 str1的hascode895667206
学海无涯苦作舟人间正道是沧桑
StringBuffer 的 hascode:26954214
添加字符串后StringBuffer 的 hascode:26954214
sb1=弟子规圣人教海纳百川
sb2=弟子规圣人教海纳百川
弟子规圣人教海纳百川2.718281828459045
规
可以看出str1的前后hascode值变了,而sb2的值没有改变
hashCode 看起来象地址,所以某些人就干脆把它当作地址了
byte a = (byte)0x01;
byte b = (byte)0x02;
char c = (char)a;
强制转换后c=?
java的强制转换是怎样实现的,在C里如果a,b地址连续,c读出的值可能是0x0102.在java里我想测试一下,测试后的结果是0x01。所以我想得到a,b的地址看他们是不是连续的。
http://topic.csdn.net/u/20120426/12/b8e02f1a-da8a-418c-8b9a-0f2d5cb4b90f.html
不要相信hashCode,这函数压根就是可以自己重载,和地址没有关点关系
LZ以前是学C的啵