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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

    刚开始学习整形时就有这样的疑惑,要读取a的值,就必须知道a对应的内存地址,若a映射(存储)着内存地址,那它和引用不就没有区别了吗?求教呀...{:2_34:}
    如c++中的代码(java无法读取基本类型的地址):

#include "stdafx.h"
#include "iostream"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
        int a = 2;
        int* pa = &a;
        cout << "a的值是:" << a << endl;
        cout << "a变量的地址是:" << &a << endl;

        cout << "pa的值是:" << pa << endl;
        cout << "pa指针的地址是:"<<&pa << endl;
        return 0;
}
这就更让我感觉,a是指向数值2的内存的。存储的也是地址,晕呀!

15 个回复

倒序浏览
int是基本类型,所以a存储的是a的值,但是像引用类型的话,存储的就是对象的地址。这是C\C++中的。
java中也适用,一般变量存储值,引用变量是存储对象的地址,和C++中的引用&几乎无区别,其原理和指针类似。

卧槽,,这是在学习JAVA吗?这明明是是在学习C/C++啊!!!
回复 使用道具 举报
C++的代码完全看不懂啊
回复 使用道具 举报
JVM虚拟机是可以处理基本数据类型的。如果为局部变量,其就存放在栈中的。如果是对象中的变量,当然放在堆中。
回复 使用道具 举报
kerner 发表于 2015-1-5 17:59
int是基本类型,所以a存储的是a的值,但是像引用类型的话,存储的就是对象的地址。这是C\C++中的。
java中 ...

( ⊙ o ⊙ )啊!
回复 使用道具 举报
'丫头片子' 发表于 2015-1-5 19:36
C++的代码完全看不懂啊

你直接学的Java?
回复 使用道具 举报
kerner 发表于 2015-1-5 17:59
int是基本类型,所以a存储的是a的值,但是像引用类型的话,存储的就是对象的地址。这是C\C++中的。
java中 ...

它们存储的都是值,一个是数值,另一个是地址。a指向的是数值2,引用变量a指的是2的地址。
回复 使用道具 举报
。。亲,我不是学的c,抱歉哦。走有人给你答案的
回复 使用道具 举报
本帖最后由 kerner 于 2015-1-5 21:32 编辑
蒲公英 发表于 2015-1-5 21:17
它们存储的都是值,一个是数值,另一个是地址。a指向的是数值2,引用变量a指的是2的地址。 ...

2不存在地址一说,因为他是常量,也就是编译时就确定了。所以a存储的就是2,不是2的地址。只有变量才有地址一说。不要纠结这些东西,如果需要深入搞虚拟机底层才需要了解吧。
回复 使用道具 举报
这是Java吗啊
回复 使用道具 举报
怎么个情况
回复 使用道具 举报

我想在Java中输出基本类型变量的地址,没找到方法,只能用c++表示了,哈哈
回复 使用道具 举报
iblackhorse 发表于 2015-1-5 21:19
。。亲,我不是学的c,抱歉哦。走有人给你答案的

{:3_53:}..........
回复 使用道具 举报

哥们学习多久了?我才刚开始学习。
回复 使用道具 举报
地址能不能看到还真不知道,但是基本数据类型跟引用数据类型时有区别的,最直接的是参数传值上,基本数据类型改变形参,担实参不变,引用数据类型改变就会 改变实参的值。
回复 使用道具 举报
iblackhorse 发表于 2015-1-5 22:20
哥们学习多久了?我才刚开始学习。

三个多月了,以前学过c,c++
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马