VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
楼主: 阿迪雅

java怎么看指针地址

[复制链接]

0

主题

6

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-9-30 14:15:02 | 显示全部楼层
和main的比,不可能为true把 ,应该怎么比都是false
回复

使用道具 举报

2

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-9-30 14:30:01 | 显示全部楼层
==比较的就是对象的地址。你不知道吗?
-----------------------------------
SB, 拜托看清楚代码再讲:

if (str== ???)   //这里我想跟main函数里的String str做个==比较
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-9-30 14:45:01 | 显示全部楼层
首先,你应当搞清楚的是,Java里面的String是不可变的。就是说,当你在main里面把“aaa”赋值给str以后,再在changeStr里面把“bbb”赋值给str,虚拟机就又隐式的创建了一个String,并把你的str引用连接到了新的String。原来的那个“aaa”就已经丢弃了,由JVM负责回收销毁。

然后,如果你想比较2个对象的地址,直接用==就完了。a==b,地址相等则是true,就这么简单。至于怎么看指针地址,我也不清楚toString()出来的是不是,但是在Java里面完全没必要,抛弃指针,不然你不如用C++。
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-9-30 15:00:01 | 显示全部楼层
地址是看不到了。
判断两个引用类型的变量是否正引用着同一个对象用“==”即可。
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-9-30 15:15:01 | 显示全部楼层
学Java,就要学会用Java语言来思考问题,如果只是想把Java用作一个C++思想的表达工具,那可能会非常别扭,会搞得自己很糊涂。
回复

使用道具 举报

0

主题

5

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-9-30 15:30:01 | 显示全部楼层
==比较的就是对象的地址。你不知道吗?
-----------------------------------
SB, 拜托看清楚代码再讲:

if (str== ???) //这里我想跟main函数里的String str做个==比较
=============================================================
楼主,你基本的编程都不懂啊,你把被比较对象作为参数传进来,怎么比较?就是在C里面也是要这样啊,除非你用全局变量,你怎么不开窍呢?稍微转一下不就行了。
public class StringTest {
public static void changeStr(String str){
String str2=str;
String str="bbb";
if (str==str2){
    System.out.println("==");
}
}
public static void main(String[] args) {
String str="aaa";
changeStr(str);
System.out.println(str);
}
}
还有,java里引用和c语言里面的指针概念是等价的。看来学你是刚学java吧,许多东西需要习惯的。java里面的引用虽然和c语言指针是等价的,但是它是不可计算的指针,只能进行相等和不等比较,不能进行加减运算。另外在无法获得引用的物理内存地址,虽然它在内存有实际映象。
回复

使用道具 举报

0

主题

23

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-9-30 15:45:01 | 显示全部楼层
>>SB, 拜托看清楚代码再讲:
>>if (str== ???) //这里我想跟main函数里的String str做个==比较

拜托你用脑子想清楚再讲。
不要总以SB的方式透露你对两种语言的无知。
回复

使用道具 举报

2

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
 楼主| 发表于 2020-9-30 17:00:01 | 显示全部楼层
另外在无法获得引用的物理内存地址,虽然它在内存有实际映象。
---------------
这就够了  我不需要他的物理内存  实际上C的也是windows的虚拟内存映射   
我只是想看他究竟在内存里的映射地址  
public static void changeStr(String str){
String str2=str;
String str="bbb";
if (str==str2){

这个早就想过了,可是  总不能老这样加个临时的吧  怪别扭的
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-9-30 17:30:01 | 显示全部楼层
要这么说的话,也只好说“C语言确实有它方便的地方。”
Java中Object类的hashCode方法一般情况下倒是可以保证让不同的对象返回不同的值,于是可以当个ID性质的东西来用用,但那也只是一般的语言实现者的作法,并非Java语言本身的硬性要求。
而且,Object.hashCode是可以被重载的,所以即使Object中那样做的,派生类中也仍然不一定。
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-9-30 17:45:01 | 显示全部楼层
另外,在Eclipse中调试Java程序时,可以从Variables窗口中观察对象的ID。
(我用的是Sun自己的JDK,不清楚其它厂商的实现是否也会让每个对象实际拥有一个ID)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表