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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁强强 中级黑马   /  2013-2-4 17:58  /  2358 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁强强 于 2013-2-4 18:43 编辑

看了视频后很困惑上代码:
String a = “abc”;//初始化a值为“abc”。
      a = “aaa”;//我理解为对a进行赋值,听了老毕的视频好像是指向,把a指向了“aaa”,不是把“aaa”赋值给了a。

如果以上说法正确的话,
int a = 1;
   a = 2;//这个难道也不是赋值是指向吗?

10 个回复

倒序浏览
int是基本数据类型,而String是引用数据类型,所以不能把int当成引用数据类型去理解。
回复 使用道具 举报
字符串‘aaa’在内存中有一个地址, 变量a 指向了那个地址。当获取a的时候,就找到那个地址,并读到那个地址上存着'aaa'这个字符串。
其实可以理解成赋值。 只是指向这个理解更专业点。
回复 使用道具 举报
string 是引用类型,存储在堆中,栈中只存储的它的引用地址。 int是值类型,直接存储在栈中
用一个简单的图来看存储过程就是这样的:

评分

参与人数 1黑马币 +6 收起 理由
黄锦成 + 6

查看全部评分

回复 使用道具 举报
你先明白什么是基本数据类型(byte/short/int/long/char/boolean/float/double)和非基本类型(类)!
然后弄清楚内存的栈和堆;
1,基本数据类型是直接存储在栈中的,所以int a = 1;是将1直接赋值给a变量;
2,非基本类型是通过new在堆中分配内存(Object obj = new Object()),然后将它在堆中的内存地址存储在栈中,最后将栈中的地址值赋给obj ,这叫obj指向new Object()。
3,String 有点特殊,对于你上面的String a = “abc”;这个abc也存储在栈中,但a存放的abc在栈内存中的首地址, 所以有“指向”这样的叫法。如果String a = new String(“abc”),则同2

评分

参与人数 1黑马币 +9 收起 理由
黄锦成 + 9

查看全部评分

回复 使用道具 举报
thanks各位我懂了
区别在 基本数据类型和引用数据类型。
基本数据类型是赋值
引用数据类型是指向。
回复 使用道具 举报
陈迎春 来自手机 中级黑马 2013-2-4 19:03:59
7#
谢谢回帖,你们的回帖对新手很重要!谢谢你们!来自: Android客户端
回复 使用道具 举报
字符串abc是存在于常量池中的,string s 这个s 是存储于栈内存中的,s中存储了字符串abc 的地址,所以s 指向abc. int a在堆中赋值,
回复 使用道具 举报
"abc" "aaa"都是String的对象 存储在堆内存中 a= “abc”  只是指向了"abc"所在的内存地址 。 int a=1中的a存储在占内存中,只是将1付给了a;
回复 使用道具 举报
海阔天kong 发表于 2013-2-4 19:03
谢谢回帖,你们的回帖对新手很重要!谢谢你们!

当有问题时,先在论坛搜索一下之前的帖子,之前有十几期了,也会有人有与你相同的疑问,这样你就能很快找到答案,不用等待。如果不能解决你的疑问,再进行提问。
回复 使用道具 举报
黄锦成 发表于 2013-2-6 15:31
当有问题时,先在论坛搜索一下之前的帖子,之前有十几期了,也会有人有与你相同的疑问,这样你就能很快找 ...

好的知道了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马