首页
新闻
论坛
群组
Blog
文档
下载
读书
Tag
网摘
搜索
.NET
Java
游戏
视频
人才
外包
培训
数据库
书店
程序员
欢迎您:
游客
| 退出
| 登录
注册
帮助
我的帖子
我参与的帖子
我的空间
我的网摘
CSDN
CSDN社区
Java
J2SE / 基础类
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
生成帖子
置顶
推荐(加精)
取消推荐(加精)
锁定帖子
移动帖子
取消引用
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
java strgin类赋值疑问
[已结贴,结贴人:lbst03]
加为好友
发送私信
在线聊天
lbst03
等级:
可用分等级:
长工
总技术分:
0
总技术分排名:
313963
揭贴率:
100.00%
发表于:
2008-08-24 07:48:34
楼主
最近在看孙鑫老师的java视频,受益匪浅。
有一个引用问题不大懂
public class pt
{
public static void main(String [] args)
{
String str1="hello";
String str2=str1; //string作为引用类型,赋值的时候赋予的是引用
System.out.println("str1="+str1+" str2="+str2);
str2="world"; //为什么此处没能改变str1的值?按照孙老师的意思,由于string是常量类型。那么为什么此处赋值未报错??
System.out.println("str1="+str1+" str2="+str2); //没有改变str1的值
}
}
为什么此处没能改变str1的值?由于string是常量类型。那么为什么此处赋值未报错??谢谢
问题点数:
20
回复次数:
9
显示所有回复
显示星级回复
显示楼主回复
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zishizhilong
子时之龙
等级:
可用分等级:
贫农
总技术分:
87
总技术分排名:
97763
发表于:
2008-08-24 07:52:45
1
楼 得分:
20
String 是对象,怎么会是常量呢?
只是这个对象声明起来很简单:"world"; 就声明了一个。
str2="world";把这个对象赋给str2引用,和str1自然没有关系。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
zishizhilong
子时之龙
等级:
可用分等级:
贫农
总技术分:
87
总技术分排名:
97763
发表于:
2008-08-24 07:53:34
2
楼 得分:
0
孙老师可能是帮助你理解,但String绝对是对象,不是常量的。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lbst03
等级:
可用分等级:
长工
总技术分:
0
总技术分排名:
313963
发表于:
2008-08-24 08:01:09
3
楼 得分:
0
孙老师也是说是对象。string类对象是一个常量对象
请问str1=str2,按照对象的赋值,就是复制了地址
str2="world" 就是让这个地址中的值改变为world?
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
pzy123cn
炒饭+炒面
等级:
可用分等级:
贫农
总技术分:
361
总技术分排名:
40801
发表于:
2008-08-24 08:43:42
4
楼 得分:
0
java对String类的处理很特别 ,他会自动把"hello" 和"world"放到内存的共享区域中 ,然后在程序中所有使用这两个字符串的String类分别指向不同的索引
String str2 ;
str2 = "World" ; //在内存中创建world,并把它的引用传递给str2
String str1 = str2 ; //把str1的引用也传递到内存中的world,
if(str1 == str2)
{
//通过上面两句话 就是说str1,和str2都只是共享内存中World这个对象的一个引用,所以他们相等
System.out.println("HH");
}
str2=new String("Hello");//同理 ,在这里内存有创建了一个新的对象Hello在共享内存区域 , 然后把这个对象的引用付给了str2
System.out.println("Str2 = "+str2);
if(str1 == str2)//这是str1的引用还是内存中的"World"而str2的引用已经变成对象"Hello"了,所以他们就不相等了
{
System.out.println("HH2");
}
System.out.println("Aftre str1 is :"+str1);
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
pzy123cn
炒饭+炒面
等级:
可用分等级:
贫农
总技术分:
361
总技术分排名:
40801
发表于:
2008-08-24 08:45:47
5
楼 得分:
0
简单点说,就是java为了节省内存 ,所以对string使用了特使的管理方法 ,就是创建共享对象 ,然后让所有的String类引用个子的字符串。
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
WWWTYB
SQL新手
等级:
可用分等级:
贫农
总技术分:
602
总技术分排名:
29046
发表于:
2008-08-24 09:04:36
6
楼 得分:
0
String:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lbst03
等级:
可用分等级:
长工
总技术分:
0
总技术分排名:
313963
发表于:
2008-08-24 09:27:27
7
楼 得分:
0
4楼说的很好。但不对吧
str2=new String("Hello");//同理 ,在这里内存有创建了一个新的对象Hello在共享内存区域 , 然后把这个对象的引用付给了str2
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
lbst03
等级:
可用分等级:
长工
总技术分:
0
总技术分排名:
313963
发表于:
2008-08-24 09:29:45
8
楼 得分:
0
str2=new String("Hello");//同理 ,在这里内存有创建了一个新的对象Hello在共享内存区域 , 然后把这个对象的引用付给了str2----new创建的不再共享区
String str3="hello"; //这种方式创建的才在共享区
System.out.println(str2==str3);//打印出flase
修改
删除
举报
引用
回复
加为好友
发送私信
在线聊天
pzy123cn
炒饭+炒面
等级:
可用分等级:
贫农
总技术分:
361
总技术分排名:
40801
发表于:
2008-08-24 18:21:10
9
楼 得分:
0
Hello != hello
修改
删除
举报
引用
回复
将帖子提前
放进我的网摘
推荐给好友
我要提问
帖子加分
结贴去...
管理菜单
页面风格切换
标准风格
老版本论坛
网站简介
-
广告服务
-
网站地图
-
帮助
-
联系方式
-
诚聘英才
-
English
-
问题报告
北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
abc推荐给好友