【来源】:http://topic.csdn.net/u/20100802/13/17463a72-9207-424a-94e8-7ef70d98f6ae.html?78349
【题目】
1.String a = new String("1"+"2")共建了几个对象
我相信,绝对是个经典兼考倒一堆人的题目。经典,Java的面、笔试上都会有,可又总是有人会犯晕。呵呵!
看构造器里面("1"+"2"),这个是在编译期就已经做了处理,即代表一个字符串:"12"。
当使用new的方法创建字符串时,注意这个”new“,就表示直接开辟了内存空间,VM在对其对象的值”12“;然后再把值放到VM的常量池中,并引用其本身。所以就创建了两个对象,看反编译后的代码:
String a = new String("1"+"2");
System.out.println(a);
反编译后的:
Code:
0: new #2; //class java/lang/String 在堆上创建了一个对象
3: dup
4: ldc #3; //String 12最终的字符串值
在API中对使用new创建String的建议
:
初始化一个新创建的 String
对象,使其表示一个与参数相同的字符序列;
换句话说,新创建的字符串是该参数字符串的副本。
既然写到这了,就扩展开来,说说其他的情况,先说一个与题目中类似的,唯一区别是,不使用new创建
看代码:
String str1 = "ABC" + "CD";
String str2 = new String("ABC" + "CD");
再看其反编译后的:
Code:
0: ldc #2; //String ABCCD
2: astore_1
3: new #3; //class java/lang/String
6: dup
7: ldc #2; //String ABCCD
对比一下,我想大伙都能看出了两者的区别,首先是,直接定义字符串常量,VM不会自动调用new创建,而是在VM维护的常量池中先查找,如果发现,直接返回一个对其的引用,若不存在,把其加入,再返回一个对其的引用。
此外,再总结一下与String 有关的三种加法:
- String tmp = "a" + "b" + "c";
- String tmp = null;tmp+= "a";tmp+= "b";tmp+= "c";
- 使用Stringbuffer或StringBuilder(注意,其在多线程环境下是不安全的)的append方法
看看:
Code:
START-第一种情况String str1 = "ABC" + "CD":
0: ldc #2; //String ABCCD
2: astore_1
END-第一种情况
START-第二种情况:String str2 = null;str2 += "ABC";str2 += "CDS";str2 += "DSS";
3: aconst_null
4: astore_2
5: new #3; //class java/lang/StringBuilder: 创建了一个StringBuilder对象
8: dup
9: invokespecial #4;
12: aload_2
13: invokevirtual #5;
16: ldc #6; //String ABC : 追加第一个字符串"ABC",调用了append方法,下看
18: invokevirtual #5; //Method append:
21: invokevirtual #7; //Method toString:
24: astore_2
25: new #3; //class java/lang/StringBuilder: 再创建了一个StringBuilder对象
28: dup
29: invokespecial #4;
32: aload_2
33: invokevirtual #5; 先追加前面的字符串 "ABC"
36: ldc #8; //String CDS : 追加第二个字符串"CDS",调用了append方法,下看
38: invokevirtual #5; //Method java/lang/StringBuilder.append:
41: invokevirtual #7; //Method java/lang/StringBuilder.toString:
44: astore_2
45: new #3; //class java/lang/StringBuilder:再创建了一个StringBuilder对象
48: dup
49: invokespecial #4;
52: aload_2
53: invokevirtual #5; //Method java/lang/StringBuilder.append: 先追加前面的字符串"ABC CDS"
56: ldc #9; //String DSS:追加第三个字符串"CDS",调用了append方法,下看
58: invokevirtual #5; //Method java/lang/StringBuilder.append:
61: invokevirtual #7; //Method java/lang/StringBuilder.toString:
END-第二种情况
START-第三种情况
64: astore_2
65: new #10; //class java/lang/StringBuffer:创建StringBuffer对象
68: dup
69: invokespecial #11; //Method java/lang/StringBuffer."<init>":()V
72: astore_3
73: aload_3
74: ldc #6; //String ABC : 调用append方法
76: invokevirtual #12; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
79: pop
80: aload_3
81: ldc #13; //String DDD:调用append方法
83: invokevirtual #12; //Method java/lang/StringBuffer.append:(Ljava/lang/String;)Ljava/lang/StringBuffer;
86: pop
END-第三种情况
小结一把:在JVM中,出现了第二种情况的,会默认创建一个StringBuilder对象来对字符串进行追加,注意,每一个"+="操作符,就会创建一个新的StringBuilder对象。这里就会造成挺大的内存浪费。
而用StringBuffer/StringBuilder这个对象来实现追加,在没调用其toString方法时,其对象还是可变的,一旦调用了toString的方法,就变成了不可变的String。
2. 触发器有几种?表和视图的区别
3.hibernate中导入(导出?忘记是导入还是导出了)大量数据时,会产生大量的对象,为了避免这一现象应该怎么做?
4.struts的作用,
被用做c层的原理
5.Spring的ioc的好处
6.事务的操作步骤(不大明白这个题目的意思),为什么会有事务
这里有某位仁兄(
charles_wang8888)的解答,个人感觉其答得好:
第一题,创建了2个对象,由于编译器会吧等号右边的进行合并,所以他在常量区会建立一个 "12’的字符串,然后,在堆上创建一个对象叫a .
第
二题:日志类触发器吧,其他我不太清楚,表和视图的区别。表是在数据库的存储,视图是某些数据库语句,它不会对应数据库的存储。。表是内模式,视图是外模
式。
第三题:hibernate中导入大量对象,可以采用VO模式来优化网络交通
第4题:struts的作用是更好的反应出MVC模式,
具体你看书吧,这东西不太好回答,太开放了。
第5题目:SPRING
的IOC,控制反转,好处是通过配置来维持对象之间的关系,而不是让这些关系写死在代码中。这样对象之间的耦合程度被降低到最低
第6题:事务的操
作步骤。。不明白。威为什么要有事务。。可以吧多个步骤方在一起,让他们整体作为一个原子,要么一起成功,要么一起失败。
分享到:
相关推荐
java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 java笔试题 ...
Java 编程题全集(100 题) 本资源摘要信息涵盖了 Java 编程的基础语法、线程练习和经典编程程序,涵盖了字符串拼接、类的创建、线程练习、经典编程程序等多方面的知识点。 基础语法 1. Java 程序设计总复习题 1:...
《Java面试题》是专为即将参加Java相关岗位面试的求职者设计的复习资源。该资料全面梳理了Java面试中常见的基础知识、核心技术、项目经验以及算法数据结构等内容,旨在帮助求职者系统地掌握Java知识体系,提高面试...
JAVA 编程题全集知识点总结 本资源提供了一个完整的 JAVA 编程题全集,涵盖了大量的题目和经典的解法,非常适合刷学完基础、刷题前的知识总结与开拓。以下是从资源中提取的重要知识点: 1. JAVA 基础知识:资源中...
3 .7 搜索引擎及其他使用…………………………………………………………………… (39) 3 .8 技能操作………………………………………………………………………………… (40) 本章小结 …………...
1 引言…………………………………………………………………………………… 1 2 系统技术介绍………………………………………………………………………… 2 2.1 JAVA程序语言. ………………………………………………...
Java 编程基础知识点总结 本次试题涵盖了 Java 程序设计的基础知识点,包括 Java 语言基础、变量和数据类型、运算符、控制流语句、方法和构造方法、数组、访问控制符等。 一、Java 语言基础 * Java 源程序文件的...
Java 编程题-全集(含答案) 本资源汇集了多个 Java 程序设计题目,涵盖了 Java 基础知识、控制结构、函数设计、面向对象编程等多方面的知识点。 1. Java 程序设计总复习题 1:编写一个 Java 程序在屏幕上输出“你好...
上海交通银行作为一家知名的金融机构,其在招聘Java开发人员时会设置一定的技术门槛,通过面试环节来检验候选人的编程能力和对Java技术的理解。这道Java面试题是一个上机考核题目,意味着应聘者需要实际编写代码并...
十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA技术体系,有志于做JAVA技能提升的朋友可与我联系,交个朋友 十余年JAVA从业经验,精通JAVA...
根据给定文件的信息,我们可以提炼出以下几个重要的Java知识点: ### 1. 访问修饰符:public, private, protected, 默认(friendly) 在Java中,类成员(如方法、变量等)可以使用不同的访问控制级别来限制它们的...
java编程题目及答案,共100题,可供平时学习、练习使用,对于学习java基础算法,加强java编程能力会有所帮助。
这是我找java软件工程师时候,收集的java面试题,汇集了主要的试题,实际我在笔试中有80%的内容和这里面的是重复的.希望能帮助找java工作的您. EJB方面.doc java.doc Java中文问题详解(高手必读).txt Java中文问题...
java web面试题.pdf java就业面试题宝典.rar Java面试题.pdf 51CTO下载-程序员面试宝典(全).pdf java华为面试题.pdf java(软件)工程师面试题大全-100%公司笔试题你都能碰到几个 达内笔试题集答案集.pdf 面试题集(全)...
java面试资料java面试题集java笔试题汇总资料,java面试资料java面试题集java笔试题汇总资料,java面试资料java面试题集java笔试题汇总资料,包括基础面试题、JavaWeb面试题、JAVA面试题集.txt、分布式相关面试题...
java企业面试题大全(包括18个文档)。1、15个经典面试题.pdf。2、120个Java经典面试题和答案(上).pdf。3、120个Java经典面试题和答案(下).pdf。4、EJB方面.pdf。5、java web面试题.pdf。6、Java基础方面.pdf。7...
Java作为一门广泛使用的编程语言,其面试笔试题涵盖了众多领域,包括基础语法、面向对象、集合框架、多线程、异常处理、IO流、网络编程、数据库操作、设计模式、JVM优化等。以下是对这些知识点的详细阐述: 1. **...
这些资源包括面试问题合集、整理的资料、Android面试题、学员入学面试总结、面试技巧、必须掌握的重点知识以及基础测试和入学考试题等,旨在全面覆盖Java基础知识和面试必备技能。 首先,面试问题合集和整理的资料...
华为 Java 笔试题面试题 本文主要涵盖了 Java 语言的基础知识点,涉及到 Java 语言的历史发展、语法特点、数据类型、运算符、控制结构、方法、类和对象、继承、多态、抽象类和接口、异常处理等方面。 一、单项选择...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码,...