黑马程序员技术交流社区

标题: 对String的类型不理解 [打印本页]

作者: 丁强强    时间: 2013-2-4 17:58
标题: 对String的类型不理解
本帖最后由 丁强强 于 2013-2-4 18:43 编辑

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

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

作者: 冯佩    时间: 2013-2-4 18:13
int是基本数据类型,而String是引用数据类型,所以不能把int当成引用数据类型去理解。
作者: 曾钦    时间: 2013-2-4 18:17
字符串‘aaa’在内存中有一个地址, 变量a 指向了那个地址。当获取a的时候,就找到那个地址,并读到那个地址上存着'aaa'这个字符串。
其实可以理解成赋值。 只是指向这个理解更专业点。
作者: 刘明杰    时间: 2013-2-4 18:18
string 是引用类型,存储在堆中,栈中只存储的它的引用地址。 int是值类型,直接存储在栈中
用一个简单的图来看存储过程就是这样的:

作者: 逍林游    时间: 2013-2-4 18:19
你先明白什么是基本数据类型(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

作者: 丁强强    时间: 2013-2-4 18:44
thanks各位我懂了
区别在 基本数据类型和引用数据类型。
基本数据类型是赋值
引用数据类型是指向。
作者: 陈迎春    时间: 2013-2-4 19:03
谢谢回帖,你们的回帖对新手很重要!谢谢你们!
作者: 沈文杰    时间: 2013-2-5 00:05
字符串abc是存在于常量池中的,string s 这个s 是存储于栈内存中的,s中存储了字符串abc 的地址,所以s 指向abc. int a在堆中赋值,
作者: 刘凯    时间: 2013-2-5 01:27
"abc" "aaa"都是String的对象 存储在堆内存中 a= “abc”  只是指向了"abc"所在的内存地址 。 int a=1中的a存储在占内存中,只是将1付给了a;

作者: 黄锦成    时间: 2013-2-6 15:31
海阔天kong 发表于 2013-2-4 19:03
谢谢回帖,你们的回帖对新手很重要!谢谢你们!

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

好的知道了,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2