- 浏览: 646811 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (310)
- C&C++ (14)
- Java (52)
- Python (13)
- Web (10)
- Tomcat (2)
- Struts2 (2)
- Spring (3)
- Hibernate (11)
- SWT (1)
- Linux (35)
- WebService (1)
- 工具 (3)
- 数据库 (10)
- 开源项目 (3)
- 搜索技术 (4)
- 链接记录 (3)
- 搜集信息 (12)
- 工作笔记 (16)
- 星星点点 (20)
- 英文片语 (7)
- 读书笔记 (3)
- 自考资料 (3)
- 习题自解 (1)
- 一例一课 (0)
- 运动积累 (1)
- 留档 (0)
- SQL (5)
- JPA (1)
- JSP (3)
- JSON (1)
- Javascript (5)
- Excel (1)
- vbox (3)
- 虚拟机 (1)
- nat (1)
- secureCRT (1)
- centos (1)
- ssh (1)
- ide (1)
- hive (2)
- impala (1)
- ascii (1)
- redis (1)
- seckill (1)
- nginx (2)
- git (0)
- mq (1)
- maven (1)
- java并发包 (1)
- 阅源 (1)
- mybatis (1)
最新评论
-
dotjar:
awk -F "/" '{print $3 ...
@Marked-linux命令使用 cut/sort/uniq -
DEMONU:
直接将要删除的key记下来,遍历完了,在删除
@Marked-Java 遍历Map时 删除元素 -
LeeXiao:
感谢分享
@Marked-Java 遍历Map时 删除元素 -
nicegege:
受益匪浅
mysql char varchar -
nicegege:
受益匪浅
@Maked-mysql使用规范
String s = new String("abc");创建了几个String对象?
String s = new String("abc");创建了几个String对象?
引用变量与对象的区别;
字符串文字"abc"是一个String对象;
文字池(pool of literal strings)和堆(heap)中的字符串对象。
一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。
A aa;
这个语句声明一个类A的引用变量aa[我们常常称之为句柄],而对象一般通过new创建。所以题目中s仅仅是一个引用变量,它不是对象。
二、Java中所有的字符串文字[字符串常量]都是一个String的对象。有人[特别是C程序员]在一些场合喜欢把字符串"当作/看成"字符数组,这也没有办法,因为字符串与字符数组存在一些内在的联系。事实上,它与字符数组是两种完全不同的对象。
System.out.println("Hello".length());
char[] cc={'H','i'};
System.out.println(cc.length);
三、字符串对象的创建:
由于字符串对象的大量使用(它是一个对象,一般而言对象总是在heap分配内存),Java中为了节省内存空间和运行时间(如比较字符串时,==比equals()快),在编译阶段就把所有的字符串文字放到一个文字池(pool of literal strings)中,而运行时文字池成为常量池的一部分。文字池的好处,就是该池中所有相同的字符串常量被合并,只占用一个空间。
我们知道,对两个引用变量,使用==判断它们的值(引用)是否相等,即指向同一个对象:
String s1 = "abc" ;
String s2 = "abc" ;
if( s1 == s2 ) System.out.println("s1,s2 refer to the same object");
else System.out.println("trouble");
这里的输出显示,两个字符串文字保存为一个对象。就是说,上面的代码只在pool中创建了一个String对象。
现在看String s = new String("abc");语句,这里"abc"本身就是pool中的一个对象,而在运行时执行new String()时,
将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s持有。ok,这条语句就创建了2个String对象。
String s1 = new String("abc") ;
String s2 = new String("abc") ;
if( s1 == s2 ){ //不会执行的语句}
这时用==判断就可知,虽然两个对象的"内容"相同(equals()判断),但两个引用变量所持有的引用不同,
上面的代码创建了几个String Object? (三个,pool中一个,heap中2个。)
(引用某位仁兄引用某位仁兄的。。。。。)
String s = new String("abc");创建了几个String对象?
引用变量与对象的区别;
字符串文字"abc"是一个String对象;
文字池(pool of literal strings)和堆(heap)中的字符串对象。
一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。
A aa;
这个语句声明一个类A的引用变量aa[我们常常称之为句柄],而对象一般通过new创建。所以题目中s仅仅是一个引用变量,它不是对象。
二、Java中所有的字符串文字[字符串常量]都是一个String的对象。有人[特别是C程序员]在一些场合喜欢把字符串"当作/看成"字符数组,这也没有办法,因为字符串与字符数组存在一些内在的联系。事实上,它与字符数组是两种完全不同的对象。
System.out.println("Hello".length());
char[] cc={'H','i'};
System.out.println(cc.length);
三、字符串对象的创建:
由于字符串对象的大量使用(它是一个对象,一般而言对象总是在heap分配内存),Java中为了节省内存空间和运行时间(如比较字符串时,==比equals()快),在编译阶段就把所有的字符串文字放到一个文字池(pool of literal strings)中,而运行时文字池成为常量池的一部分。文字池的好处,就是该池中所有相同的字符串常量被合并,只占用一个空间。
我们知道,对两个引用变量,使用==判断它们的值(引用)是否相等,即指向同一个对象:
String s1 = "abc" ;
String s2 = "abc" ;
if( s1 == s2 ) System.out.println("s1,s2 refer to the same object");
else System.out.println("trouble");
这里的输出显示,两个字符串文字保存为一个对象。就是说,上面的代码只在pool中创建了一个String对象。
现在看String s = new String("abc");语句,这里"abc"本身就是pool中的一个对象,而在运行时执行new String()时,
将pool中的对象复制一份放到heap中,并且把heap中的这个对象的引用交给s持有。ok,这条语句就创建了2个String对象。
String s1 = new String("abc") ;
String s2 = new String("abc") ;
if( s1 == s2 ){ //不会执行的语句}
这时用==判断就可知,虽然两个对象的"内容"相同(equals()判断),但两个引用变量所持有的引用不同,
上面的代码创建了几个String Object? (三个,pool中一个,heap中2个。)
(引用某位仁兄引用某位仁兄的。。。。。)
发表评论
-
@Marked-ExecutorService的invokeAny方法注意
2018-08-23 20:19 932package com.msxf.datasource.t ... -
XML fragments parsed from previous mappers already contains value for
2018-06-02 19:36 25991. ssm项目报错: WARN [main] ... -
@Marked-阅源-jdk8-FunctionalInterface注解
2017-10-26 17:01 857package java.lang; impor ... -
TPE-ThreadPoolExecutor
2017-10-10 15:24 94TPE: java.util.concurrent ... -
@Marked-java-Queue方法
2017-06-27 14:09 616Collection>Queue // 1. 新增 ... -
ImpalaTest
2017-02-16 15:11 413package com.niewj.demo; imp ... -
@Marked-CORS跨域请求:前后端分离
2016-12-22 16:42 16771. 请求过滤器: /** ... -
@Marked-null列的值不参与比较
2016-10-26 17:23 571假如数据库有表emp: empno name age ... -
自定义泛型方法, 三级排序, low版,待升级
2016-10-20 21:17 460package com.jd.dashboard.util ... -
java enum 枚举值
2016-09-21 18:45 565public enum PieChartEnum { P ... -
maven install 时 pom中skip test
2016-09-19 23:08 5625<plugin> <groupI ... -
DateUtil-1
2016-09-19 21:47 504/** * @Title: DateUtil.java ... -
@Marked-ClassNotFoundException: java.util.ArrayList$SubList 错误
2016-09-18 15:00 1748ClassNotFoundException: java ... -
@Marked-mybatis 字符串比较 == 用法
2016-08-22 21:45 5891private String deptLevel; &l ... -
@Marked-List/Set 泛型转换
2016-08-04 11:02 1648Type typeSet = new TypeToken& ... -
@Marked-excel导出csv包括逗号等的处理
2016-08-03 09:22 4750/** * @Title: trimRubbishCh ... -
@Marked-保留两位小数,四舍五入
2015-06-16 01:09 673new java.text.DecimalFormat(& ... -
tomcat 404报错 问题可能之一
2015-05-29 18:20 1432一个tomcat下多个应用:我的应用xxx启动不起来,页面 ... -
@Marked-关于java和JS中的lastIndexOf方法的误解。
2014-08-08 16:32 760今天看JS的数组的lastIndexOf()方法,看书上的 ... -
@Marked-冒泡排序易理解实例
2013-05-08 11:43 1250package com.niewj.ds; publ ...
相关推荐
数组的定义和初始化通常包含以下几个步骤: 1. **声明**:指定数组的类型,如`int[] numbers`声明了一个整型数组。 2. **创建**:分配内存空间,如`numbers = new int[5]`创建了一个包含5个元素的整型数组。 3. **...
在MFC中,主要有以下几种对象:应用程序对象、文档对象、边框窗口对象、文档边框窗口对象、视对象以及文档模板对象。这些对象之间存在着特定的创建和销毁顺序,以及复杂的交互作用关系。 1. **对象创建关系**: - ...
在上面的代码中,我们定义了一个名为myclassA的类,并使用new操作符来创建一个对象。我们还使用delete操作符来释放该对象。 我们还使用了malloc和free函数来分配和释放内存。malloc函数会分配一块内存,但是不会...
在JVM中,对象的创建过程分为几个步骤: 1. **类加载检查**:在创建对象之前,JVM会检查该类是否已经被加载、解析和初始化。如果还没有,会执行相应的类加载过程。 2. **内存分配**:对象所需内存的大小在类加载...
以下是几个主要的设计模式类别及其关键知识点: 1. 结构型模式:这类模式关注类和对象的组合,以创建更复杂的结构。例如,适配器模式用于接口转换,让不同接口的类能够协同工作;装饰模式动态地给对象添加新的行为...
观察者模式(Observer)定义对象间的一对多依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并被自动更新;状态模式(State)允许对象在其内部状态改变时改变其行为;模板方法模式(Template ...
面向对象编程中包含了几个重要的概念,包括但不限于: - **封装**:指将数据和行为封装在一个单一的对象中。这样可以隐藏对象内部的实现细节,只暴露有限的接口供外部访问。 - **继承**:子类可以从父类继承属性和...
在JavaScript中,创建类和对象是面向对象编程的基础。本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的...
JavaScript中的构造函数是一种特殊类型的函数,可以用来创建和初始化一个对象。通过`new`关键字调用构造函数,可以创建一个新的对象实例。例如: ```javascript function Person(name, age) { this.name = name;...
首先,创建数据表的过程通常涉及到以下几个关键步骤: 1. **创建新类继承SQLiteOpenHelper**:SQLiteOpenHelper是Android提供的一个抽象类,用于帮助我们操作数据库,包括创建、升级数据库等。我们需要创建一个新的...
在使用SqlConnection对象时,要注意几个重要的点: 1. **连接池**:.NET框架使用连接池技术来管理SqlConnection对象,可以有效减少打开和关闭数据库连接的开销。当连接关闭时,它会返回到连接池而不是立即释放,供...
本章主要涵盖了以下几个方面的内容: 1. **面向对象程序设计基础**: 面向对象编程是一种编程范式,它基于“对象”的概念,对象包含了数据(属性)和操作数据的方法(行为)。面向对象的特性包括封装、继承和多态...
在易语言中,对象创建快捷方式的过程通常包括以下几个步骤: 1. **定义变量**:首先,你需要定义几个关键变量,例如目标文件路径(TargetFilePath),快捷方式的保存位置(ShortcutPath),以及可能的快捷方式图标...