1 String a="Hello JAVA";
2
3 String b=a;
4
5 System.out.println(a);
6
7 System.out.println(b);
8
9 System.out.println(a==b);
10
11 a="b";
12
13 System.out.println(a);
14
15 System.out.println(b);
16
17 System.out.println(a==b);
18
19 String c=new String("Hello JAVA");
20
21 String d=new String("Hello JAVA");
22
23 System.out.println(c==d);
24
25 System.out.println(a==d);
26
27 System.out.println(a==c);

运行结果:

Hello JAVA

Hello JAVA

true

b

Hello JAVA

false

false

false

false

当创建String类型的变量并赋值时,会先到常量池中寻找是否存在这个常量的字符串,如果有则将引用(即地址)返回,如果没有则在常量池中开辟空间并赋值没这个给定的常量的值,然后将引用返回。所以当重新给a赋值”b”时,在常量池中没有找到”b”,然后在常量池中写入”b”,然后将引用返回,但原来的b的引用依然指向原来的”a”,所以a=”b”后,变量a的引用与变量b的引用不一致,所以将返回false。

当使用String的构造函数初始化变量时,会直接在堆中重新开辟空间并赋值然后返回引用,所以使用new创建的变量的引用均与其他变量不一致,所以得到最后几个false。

记录下来,留待后查,同时方便他人。

可以联系我进行交流。Renhanlinbsl@163.com

谢谢支持。

2016.4.1

14:08

JAVAString初始化的引用问题的更多相关文章

  1. iOS 底层解析weak的实现原理(包含weak对象的初始化,引用,释放的分析)

    原文 很少有人知道weak表其实是一个hash(哈希)表,Key是所指对象的地址,Value是weak指针的地址数组.更多人的人只是知道weak是弱引用,所引用对象的计数器不会加一,并在引用对象被释放 ...

  2. java 数组声明定义 数组内存分配 数组初始化 数组引用 数组的遍历

    一,数组的定义 Java 中定义数组的语法有两种: 1. type arrayName[]; 2. type[] arrayName;type 为Java中的任意数据类型,包括基本类型和组合类型,ar ...

  3. C++结构体的定义、初始化和引用

    定义: 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 声明一个结构体类型的形式是: struct Student{ //声明一个结构体类型Student in ...

  4. java学习笔记——java中对象的创建,初始化,引用的解析

    如果有一个A类. 1.例如以下表达式: A  a1 = new A(); 那么A是类,a1是引用.new A()是对象.仅仅是a1这个引用指向了new A()这个对象. 2.又如: A  a2; A代 ...

  5. C++引用的作用和用法

    引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符&引用名=目标变量名: 例如: int q; int &ra=a; 说明: &am ...

  6. C++中引用的本质

    一般的教材上讲到引用时,都是说"引用是对象的一个别名".我认为这种定义是不清晰的,不利于初学者理解引用.至少我自己曾经被这个定义困扰了一段时间.到底什么是"别名" ...

  7. NDK开发之引用(局部引用,全局引用,虚全局引用)

    1.先引出我遇到的一个问题(我觉得先写问题,这样印象更深刻一点): Android Java层在调用本地jni代码的时候, 会维护一个局部引用表(最大长度是512), 一般jni函数调用结束后, jv ...

  8. .net中以传引用的方式 向方法中传参数

    CLR(CommonLanguageRuntime)公共语言运行时,允许以传引用而非传值的方式传递参数.在C#中,这是用关键字 out 和ref来做到的. 从CLR角度来看,这两个关键字没什么区别,生 ...

  9. C++引用(References)

    1.C++引用: 引用就是某一变量(目标)的一个别名, 相当于同一个人有了两个名字, 无论喊哪一个名字实际上都是指的同一个人. 同样, 在引用上, 对引用的操作与对变量直接操作的效果完全一样, 因此, ...

随机推荐

  1. Java多线程(四)java中的Sleep方法

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

  2. GraphQL 是什么

    我的理解,GraphQL 是一种以Json为载体实现:操作数据和获取结果的需求的查询语言!简言:以Json换Json.

  3. Session的生命周期之关于浏览器关闭后的Session

    Session是JSP的九大内置对象中的一个,它可以保存当前用户的各种的状态信息. 初次接触Session时认为Session的生命周期是从浏览器打开一个窗口发送请求开始,到浏览器窗口关闭结束.其实这 ...

  4. C# List去重的三种方法(转)

    三种去重的方法 1.List中的元素实现IEquatabe接口,并提供Equals方法和GetHashCode方法. 2.使用表达式 users.Where((x,i)=>users.FindI ...

  5. 网站建设部署与发布--笔记4-部署mysql

    部署MySQL 1.更新操作系统 $ yum update -y 2.安装mysql数据库,在CentOS 7.2 中,使用了mariadb替代了官方的mysql $ yum install mari ...

  6. 16.xml

    一.xml 1.什么是XML:是一种可扩展的标记语言,所有标记都可以自定义,常用来做配置文件和数据传输的载体2.语法:标签(元素):<元素名> 值 </元素名>属性:在元素中 ...

  7. Python IDLE 增加清屏功能

    (Python2,Python3 通用) 保存如下代码到 ClearWindow.py """ Clear Window Extension Version: 0.2 A ...

  8. Spring Security(十八):5.9 Post Processing Configured Objects

    Spring Security’s Java Configuration does not expose every property of every object that it configur ...

  9. CF1103D Professional layer 状压DP

    传送门 首先对于所有数求gcd并求出这个gcd含有的质因子,那么在所有数中,只有这一些质因子会对答案产生影响,而且对于所有的数,每一个质因子只会在一个数中被删去. 质因子数量不会超过\(11\),所以 ...

  10. JSOUP如何POST只含JSON格式的数据

    引言 现在前后端分离渐渐成为主流,网站可以通过json格式的数据和服务端进行交互,比如下图: 关于这点,JSOUP官方API文档已经给出了解决方法 Connection requestBody​(St ...