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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lqg5522 中级黑马   /  2015-4-23 20:56  /  481 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lqg5522 于 2015-4-27 21:31 编辑

为什么API里面说字符串是常量,不能被改变。
可是我的代码这样写却没有问题
  1. public class StringDemo {
  2.         public static void main(String[] args) {
  3.                 String str="abdc";
  4.                 str = "fff";
  5.                 System.out.println(str);//输出fff
  6.         }
  7. }
复制代码

10 个回复

倒序浏览
str = "fff";这个是又给str赋值了,输出的肯定就是fff,API说的是字符串的引用不能被改变
回复 使用道具 举报
这题没有改变字符串,只是把fff赋值给了str =的意识是说把右边的值赋值给予左边
回复 使用道具 举报
你理解错了,单纯的字符串是常量,但是你定义了一个变量str,一开始将字符串常量abdc赋值给变量str,后来又把字符串fff赋值给str并没有改变常量abcd只是改变了变量str的值
回复 使用道具 举报
看看。膜拜大神~~~~~~~
回复 使用道具 举报
我的理解,字符串常量是不变的,字符串变量是可以变的
回复 使用道具 举报
魔蝎座 发表于 2015-4-23 21:54
你理解错了,单纯的字符串是常量,但是你定义了一个变量str,一开始将字符串常量abdc赋值给变量str,后来又 ...

就是说其实是在内存里面创建了两个字符串,然后把后面那个的引用指向了str吗
回复 使用道具 举报
yapo 中级黑马 2015-4-23 22:12:16
8#
数据类型为“String",分析:用new String() 创建的字符串不是常量,不能在编译期就确定,所以new String() 创建的字符串不放入常量池中,它们有自己的地址空间。
回复 使用道具 举报
魔蝎座 发表于 2015-4-23 21:54
你理解错了,单纯的字符串是常量,但是你定义了一个变量str,一开始将字符串常量abdc赋值给变量str,后来又 ...

说的很对很有道理。就是这样。
回复 使用道具 举报
字符串是字符串,变量是变量,所指的都不一样,你把字符串赋值给变量,又把变量的值改变,那结果肯定不一样。
回复 使用道具 举报
字符串本身是不变的,是一个对象,这个例子中 str是变量,str先是指向了“abdc”这个对象,后又改为指向“fff”这个对象,变化的是str这个变量,而非字符串本身。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马