用new关键字对一个String 变量赋值和用literal值直接赋值有什么不同(转)
String str1="ABC"; 和String str2 = new String("ABC"); 有什么区别。
String str1="ABC" 可能创建一个对象或者不创建对象,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").如果已经存在,str1直接reference to 这个String池里的对象。
String str2 = new String("ABC") 至少创建一个对象,也可能两个。因为用到new 关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").
String 有一个intern() 方法,native,用来检测在String pool是否已经有这个String存在。
考虑下面的问题:
String str1 = new String("ABC");
String str2 = new String("ABC");
str1 == str2 的值是True 还是False呢? False.
String str3 = "ABC";
String str4 = "ABC";
String str5 = "A" + "BC";
str3 == str4 的值是True 还是False呢? True.
str3 == str5 的值是True 还是False呢? True.
在写代码的时候,一般不要 String str2 = new String("ABC");
String a = "ABC";
String b="AB";
String c=b+"C";
System.out.println(a==c); false
a和b都是字符串常量所以在编译期就被确定了!
而c中有个b是引用不是字符串常量所以不会在编译期确定。
而String是final的!所以在b+"c"的时候实际上是新创建了一个对象,然后在把新创建对象的引用传给c.
用new关键字对一个String 变量赋值和用literal值直接赋值有什么不同(转)相关推荐
- python定义一个整数变量_Python变量与常量
1.什么是变量 a=1,其中 a 就是变量名称,1 就是它的值.在程序运行过程中,变量的值一般都会发生改变,内存中会专门开辟一段空间,用来存放变量的值,而变量名将指向这个值所在的内存空间.与变量相对的 ...
- 【Java面试题】3 Java中使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?超详细解析...
/* * 问题:使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 * 答: * 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以 ...
- 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变
使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变 答: 使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的. 代码 public ...
- 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的.
- Oracle 将一个查询结果值动态赋值给一个变量
在写存储过程或函数时,经常需要用到中间变量,需要将一些值做临时存储. 可以通过动态变量方式来赋值.如下: FUNCTION YOUR_FUN (VAL1 IN NVARCHAR2)RETURN NCL ...
- java的注释、关键字、标识符、变量常量、数据类型、运算符、流程控制等
java的注释.关键字.标识符.变量常量. 数据类型.运算符.流程控制等 1. java概述 1.1 java的技术体系 Java SE:是Ja ...
- Java中的标识符、关键字、字面值、变量、八种基本数据类型与类型转换规则
目录 1.Java中的标识符 2.Java中的关键字 3.Java中的字面值 4.Java语言中的变量 5.Java中的数据类型 数据类型的分类 基本数据类型 1.char类型 2.整数类型 3.浮点 ...
- JAVA笔记(1)Java概述、开发环境搭建 、Eclipse概述、 注释、关键字、常量、变量、数据类型、标识符
文章目录 第1章 Java概述 1.1 Java语言发展史 1.2 跨平台原理 1.3 JVM JRE JDK 第2章 Eclipse开发工具 2.1 Eclipse概述和安装 2.2 Eclipse ...
- python定义一个整数变量a_第二篇.1、python基础之数据类型与变量
一.变量 1 什么是变量之声明变量 #变量名=变量值 age=18 gender1='male' gender2='female' 2 为什么要有变量 变量作用:"变"=>变 ...
最新文章
- SQL 2005 Express 的“企业管理器” 下载
- 蓝桥杯java第七届决赛第三题--打靶
- 一个视觉交互设计失败的案例
- SpringSecurity分布式整合之验证认证的过滤器
- [Jobdu] 题目1499:项目安排
- .NET Core 如何禁止.resx文件自动生成Designer.cs
- Linux基础(九)--定时任务
- 微信的cookie 和 session
- B VUE系列 三:vuex,vue全局变量管理和状态更新的利器
- 计算机教室建设方案ppt,屏蔽机房建设方案.ppt
- 化工、食品外贸行业管理难点
- 合宙air105上手记录
- 前端基础-04-盒子模型
- 简练软考知识点整理-估算活动资源
- 手游行业2011年十大事件盘点
- Spring Boot 入门之登录创建
- 主流七款WEB服务器软件点评
- PC微信视频号下载视频研究
- Coreldraw中选择工具技巧十五招
- 华为od机试真题 JS 实现【热点网站统计】
热门文章
- UITableView 详解 教程
- Promise async/await的理解和用法
- java 泛型详解、Java中的泛型方法、 java泛型详解
- [NOIP2015] 子串
- 嵌入式Linux系统运行流程图
- Linux+Nginx+Apache+Atlas+Mysql+Php+Redis 分部式部署详细版
- POJ-1386 Play on Words 有向图欧拉通路判定
- 【资料整理】一些英语面试题整理
- ffmpeg文档2:输出到屏幕
- html如何取消盒子间的间隔,使用flexbox时,多行子元素之间的间距如何控制?