书上描述的事情是对的,但例子举的不好。

首先你得区分jdk的版本,jdk8及以上是不对的。以下版本我也没试过,你可以自己尝试或者看看书里有没有说运行环境信息。

Java内存确实区分为堆和栈,还有一些其他的。要是对Java运行内存感兴趣,可以单独去研究这部分,这里不在展开,不然就太大了。

堆区,存一些对象,包括数组。你这里就是把string当做对象看,它应该在这里存储

栈区,存一些局部变量,比如方法里定义的int,double等基本数据类型。注意一定是局部变量,而不是说基本数据类型就存在栈里。这点要搞明白。如果实在觉得难以理解,也可以当做,在你main方法里所有的基础数据类型都在栈里,对象类型都在堆里

然后重点来了,书中所说的引用,就是对象类型,对象存在堆里。你的变量a实际就是指针,指向了堆。变量b和a一样,也指向了同一个地方。这时候,你修改a也就是修改b。

举个例子:

String []a = {"1","2"};

String []b = a;

a[1] = "5";

for (String s: a) {

System.out.print(s+" ");

}

System.out.println();

System.out.println("=========分割==========");

for (String s: b) {

System.out.print(s+" ");

}

结果:

但是string不一样。String不仅仅是对象了,他有点特殊。

String类的intern()方法:一个初始为空的字符串池,它由类String独自维护。当调用 intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(oject)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。

什么意思呢,举个例子:

String a = "123";

采用字面值的方式创建一个字符串时,JVM首先会去字符串池中查找是否存在"123"这个对象,如果不存在,则在字符串池中创建"123"这个对象,然后将池中"123"这个对象的引用地址返回给"123"对象的引用a,这样a会指向池中"123"这个字符串对象。

然后

String b = "123";

//或者

b = a;

这里b不管是直接等于 “123”还是 b=a,实际上,b和a指向的是一个地址,都是一样的。

但这时,b = “456”,那么,又会进行上面的步骤,先查找是否存在“456”这个对象,如果不存在,则在字符串池中创建“456”这个对象,然后将引用地址返回给引用b,b就会指向池中“456”这个字符串对象。

所以,在实际中,结果会是不一样的,就像你运行的结果那样。

当然,String的内容还有,这里也不展开说了,感兴趣自己百度搜搜也一堆

java for 变量赋值_Java 如何引用变量赋值?相关推荐

  1. 【C++】引用变量--1.如何创建引用变量

    目录 引用变量 1.1 创建引用变量 引用变量的程序示例 程序运行结果 引用变量 引用是对已定义的变量的别名,比如一个人的大名和小名,这指的都是一个人.区别指针与引用变量 1.1 创建引用变量 比如要 ...

  2. java 常量和变量 区别_Java常量和变量的区别是什么

    今天华清Java学院小编要和大家分享的是Java常量和变量的区别.在使用Java语言进行程序设计时,经常需要用到常量和变量来存储信息.什么是常量?什么是变量?Java常量和变量的区别是什么呢? Jav ...

  3. java定义基础变量语句_java语言基础-变量

    一丶变量的基本概念 1.什么是变量 (1).内存中的一个存储区域 (2).该区域有自己的名称(变量名),和类型(数据类型) (3.)该区域的数据可以在同一类型范围内不断变化(定义变量的主要目的是因为数 ...

  4. java 获取操作系统的参数_JAVA获取系统变量

    一.环境变量 注意: Linux下获取值是用$,多个路径分割是用:,Windows下获取值是用%变量名%,多个路径分割是用的;. Windows 10: SET 显示.设置或删除 Windows 环境 ...

  5. JAVA中string的赋值_Java中关于String赋值的两种形式

    说明: String在java中是使用频率很高的一个类,之前使用的时候并没有过多的在意,只知道有两种赋值方式,一种是采用字面值方式(String string1 = "string" ...

  6. java 常量变量使用_java常量和变量入门教程

    java常量和变量入门教程 Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代).运算符重载(operato ...

  7. java中间缓存变量机制_Java中间缓存变量机制

    j++,是一个依赖于java里面的"中间缓存变量机制"来实现的, ++在前就是"先加后赋"(++j) ++在后就是"先赋后加"  (j++) ...

  8. java 实例变量是类的成员变量吗_JAVA中成员变量,局部变量,实例变量,类变量,有什么关系,,?...

    展开全部 java易混淆概念之类变量32313133353236313431303231363533e4b893e5b19e31333365643662.实例变量.局部变量 类变量.实例变量.局部变量 ...

  9. java获取环境变量路径_Java读取系统环境变量的方法

    Java读取系统环境变量的方法 时间:2017-08-30     来源:华清远见JAVA学院 本文华清Java学院小编要和大家分享的是Java读取系统环境变量的方法,主要涉及到java读取系统环境变 ...

  10. java中的static变量初始化_Java初始化静态变量的时间顺序

    1. 开始吧! 今天,我们来探讨交流下静态变量初始化过程.Java虚拟机在类加载期间也同样遵循这个过程. 2. 初始化过程 在较高的层次上,JVM执行以下步骤: 首先,加载并链接类.然后,这个过程的& ...

最新文章

  1. 3D中的OBJ文件格式详解(转载)
  2. C++知识点28——使用C++标准库(再谈迭代器)
  3. php dlt645,DLMS - DLT645规约转换模块
  4. 今天俺要说一说工厂方法模式(Factory)
  5. 10.9 kill以及raise函数
  6. 算法练习day14——190402(贪心:切金条、做项目、会议室安排)
  7. python测试之道pdf百度云_Python测试之道——笔记1
  8. doublevalue_Java Double类doubleValue()方法与示例
  9. python socket发包_一个python发包的脚本
  10. 从质疑到成为必选项,低代码技术发展及 2022 展望
  11. C#中如何跨窗体传值
  12. 后台权限管理系统设计(图文教程)
  13. 计算机相关文献综述范文,计算机文献综述范文.doc
  14. 写给即将进入IT行业的应届生们——什么是IT行业
  15. java 用户态_内核启动用户态的程序 - 但行好事 莫问前程 - JavaEye技术网站
  16. 千元平板乐Pad A1完整拆解视频
  17. java实现微信退款
  18. 为micropython添加模块(2)-类模块
  19. 存储服务器怎样还原阵列信息,raid5数据恢复的方法
  20. 如何快速实现离散企业全链路数字化管理?

热门文章

  1. 【备用】SQL SERVER存储过程执行速度慢的问题
  2. MySQL中exists和in的区别
  3. 全面理解ThreadLocal
  4. Oracle 数据库常用操作总结二之数据库的导入和导出
  5. 使用文本编辑器+命令行的方式实现Java中的第一个程序Hello World(下)
  6. JSP 页面传值方法总结(转)
  7. nginx+iis、NLB、Web Farm、Web Garden、ARR
  8. 类别的作用?继承和类别在实现中有何区别
  9. 用Nuget图形化界面打包类库(一)
  10. 输出svn版本号到头文件