- 浏览: 702456 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47707
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
1. 虚拟机对字符串的处理
虚拟机是将字符串直接量(不用new声明的)对象放到一个对象池中去缓存的,第一次使用的时候会将其放入池中,如果下次有其他变量访问一摸一样的直接量的话直接从对象池中去取该直接量,而不是又再生成一个对象。一般该池中的对象都不会被垃圾回收器回收。
比如:
实际上这段代码仅仅创建了一个字符串直接对象,保存在对象池中,池中对象就是”1”。str1和str2指向了该对象池的对象位置。 2. 编译时能确定的值 在编译时就能确定的值,在编译的时候就能够确定是否创建新的对象池对象。比如:
实际上str3和str4在内存池中都是指向了"suhuanzhen123"这个字符串对象,所以输出时true。因为str4在编译期间就能确定值是suhuanzhen123,所以JVM不会再创建新的对象。直接从对象池中去取。 3. 在编译期间不能确定的值 如果字符串的拼接包含了函数、变量等等编译时不确定因素,那么此时就不能指向对象池中的变量了。比如
4. 在编译时就能确定值的字符串变量创建值 比如代码
实际上仅仅创建了一个对象——suhuanzhen123,缓存到对象池。 5. StringBuilder和StringBuffer的区别 一般在单线程的系统环境下优先使用StringBuilder,因为它是非线程安全的。而在多线程的环境下,比如Web系统,优先使用StringBuffer,因为它当中绝大部分方法都使用了synchronized进行修饰,保证了多线程环境下的线程安全问题。 6. 字符串之间的比较 用一个线程池的常量对象和一个变量、函数返回值比较直接使用==其实就可以了比如:
更直观一点就是
输出的是true; 如果是2个字符串变量之间比较就不能用==了
输出false。 应该用
7. 赋值语句的类型提升
就不会报错了。 赋值运算中基本数据转型的级别从高到低排序是String->double->float->long->int->chart、short->byte。 如果运算中含有字符串变量,那么二话不说,此表达式所有的运算最后的返回值就是一个字符串了,比如
所以最高级别还是String。 8. 符合运算符中的隐式类型转换 在符合运算符中实际上存在着一个隐藏的类型转换
实际上会输出31,如果是之前的例子
编译器是会报错的。那么+=实质上是什么意思呢!就是
等价于
也就是说符合运算符自身还隐式地包含了一个强制转型的动作。这样做有时候会失去精度以及高位段位。
输出-3826
9. 泛型引起的陷阱
第一个循环输出无任何问题,第二个循环报出转型异常。换几话说,集合本身可以存储不同类型元素的对象的,只不过自从JDK1.5之后出现了泛型,才使我们很多人觉得集合变量仅仅能存一种类型的对象元素。泛型是为了在编译时更好的排除类型转换带来的繁琐检查。而在大多数应用中确实集合中就是同类型的元素。而泛型配合上加强的新循环,它会强制进行单一类型的转型操作。所以第二个循环的的结果就是
java.lang.Integer cannot be cast to java.lang.String 泛型还有可能引起擦除,如下:
在mynew.getId()这一句中实际上编译器这时候仅仅将它识别为Number了,直接当做Integer使用会报错,除非强制转型方可当做Integer来使用。这里就相当于将泛型信息擦除了,程序只有到了真正运行时环境下才能把其当做Integer来用,编译期间他不认识其实质面目。Java擦除泛型信息是将该对象所有的泛型信息全部擦除掉,不仅仅是那个传入的泛型,如果此类本身也定义了其他泛型相关的方法、变量,统统没有了!
10. 遇到含有.的字符串分割成字符串数组
直接用String[] array = str.split(".");不起作用,因为”.”代表可以匹配任意字符,必须转义。
String str1 = "1";
String str2 = "1";
String str3 = "suhuanzhen123";
String str4 = "suhuanzhen" + 1 + "2" + "3";
System.out.println(str3 == str4);
String str5 = "suhuanzhen123";
String str6 = "suhuanzhen" + "1".length() + "2" + "3";
System.out.println(str5 == str6);
String str6 = "suhuanzhen" + "1" + "2" + "3";
String jqgridparams = request.getParameter("jqgridparams");
if (jqgridparams != null) {
if ("getparams" == jqgridparams) {
//……………………
}
}
static String getStr(){
return "suhuanzhen123";
}
public static void main(String[] args) {
String str7 = getStr();
System.out.println("suhuanzhen123" == str7);
}
String str7 = getStr();
String str8 = new String("suhuanzhen123");
System.out.println(str8 == str7);
System.out.println(str8.equals(str7));
上图程序实际上就是类型自动提升发生了错误,num本身是int型,而num = num+33.567;表达式中使用了double类型的数值,那么此表达式会自动向最高级别的基本类型转型,但是呢num自身是int,会提示不能向上转换的编译错误。如果程序这么写
public static void main(String[] args) {
int num = 1;
double numDoub = num+33.567;
}
int num = 1;
double numDoub = num+33.567;
String str = num+numDoub+"";
int sum =1;
sum += 30.44;
System.out.println(sum);
int sum =1;
sum = sum+30.44;
sum += 30.44;
sum = (int)(sum+30.44);
short sum =9999;
sum += 999999999.9999999;
System.out.println(sum);
List list = new ArrayList();
list.add("1");
list.add(2);
list.add("3q");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
List<String> listNew = list;
for (String strNew : listNew) {
System.out.println(strNew);
}
class MyT<PK extends Number> {
private PK id;
public PK getId() {
return id;
}
public void setId(PK id) {
this.id = id;
}
}
public class TTrap {
/**
* @param args
*/
public static void main(String[] args) {
MyT<Integer> my = new MyT<Integer>();
my.setId(100);
System.out.println(my.getId() + ":" + my.getId());
MyT mynew = my;
System.out.println(mynew.getId() + ":" + mynew.getId());
}
}
class MyTT<PK extends Number> {
private PK id;
private List<String> list;
public PK getId() {
return id;
}
public void setId(PK id) {
this.id = id;
}
public List<String> findRows() {
list = new ArrayList<String>();
list.add("步惊云");
list.add("聂风");
return list;
}
}
public static void main(String[] args) {
MyTT<BigInteger> myTT = new MyTT<BigInteger>();
for (String str : myTT.findRows()) {
System.out.println(str);
}
MyTT my2 = myTT;
List listNoString = my2.findRows();
}
public static void main(String[] args) {
String str = "www.google.cn";
String[] array = str.split("\\.");
System.out.println(array.length);
}
发表评论
-
Web应用单点压力测试调优-第6季-阶段性总结
2014-03-14 12:24 3380阶段性总结 <! ... -
Web应用单点压力测试调优-第5季
2014-03-13 09:32 4131各项配置: my.cnf [clien ... -
Web应用单点压力测试调优-第4季
2014-03-12 14:55 3155调整5-Tomcat的启动JVM参数 首先先启动 ... -
单点网站压力测试调优-第3季
2014-03-11 16:21 3416调整2-调整配置,数据库连接池数量 mysql ... -
Web应用单点压力测试调优-第2季
2014-03-07 16:52 8878并发1000,准备时间1s,让它产生大量的等待请求 ... -
单点网站压力测试调优-第1季
2014-03-07 10:36 3942环境介绍 虚拟机配置 ... -
编程质量提高建议总结1(持续总结)
2014-03-05 19:42 1299编程质量提高建议总结1(持续总结) 1.混淆字母要明显 ... -
关于博客文章内容显示不全的问题
2011-06-14 09:36 2384关于博客文章内容显示不全的问题,我发现有些文章显示内容不全。 ... -
Maven3实战笔记05仓库依赖解析与插件解析
2011-06-07 09:00 34231. Maven仓库依赖解析机 ... -
Apache的对象池化工具commons-pool
2011-05-16 09:21 130951. 前言 当我们的应用中创建一个十分最重量级的 ... -
将Sun的Open Message Queue与Spring集成
2011-05-06 09:01 34851. 前言 基于JMS标准的消息中间件实现的产品 ... -
要不要池化是个艰难的选择(转)-我觉得很生动就转载了下来
2011-05-05 09:50 1568转自http://www.ixpub.net/thre ... -
java.lang.IllegalStateException: STREAM错误的理解(转)
2011-05-04 18:09 13817转自http://dimple.iteye.com/blog/ ... -
Spring3配置声明式事务
2011-05-02 16:52 45491. 配置Spring3声明式事务 在Sprin ... -
Java基础复习笔记11基本排序算法
2011-04-25 13:20 21321. 排序 排序是一个历来都是很多算法家热衷的领 ... -
Java基础复习笔记08数据结构-二叉树和二叉树的遍历
2011-04-22 09:10 25431. 二叉树 一 ... -
Java基础复习笔记07数据结构-树的概述
2011-04-19 17:35 19371. 树的概念 如果线性表、栈、队列是线性结构( ... -
Java基础复习笔记06数据结构-队列
2011-04-19 17:25 16841. 队列 队列又是一种比较特殊的线性表,和栈一 ... -
Java基础复习笔记04数据结构-线性表
2011-04-15 14:14 23021. 线性表 线性表是数据结构的一种逻辑结构,其 ... -
Java基础复习笔记03面试、笔试、开发中我们不太注意的陷阱之流程控制、面向对象、异常处理
2011-04-13 09:59 22181. switch语句的用法 有人说:“笔者基础 ...
相关推荐
java面试笔试题库java学习比较开发教程互联网公司面试资料大全合集: 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张图解...
### Java基础复习笔记03:我们不会注意的陷阱 在Java编程中,存在许多细节问题,如果不加以注意,则可能在实际开发过程中导致各种难以预料的问题。本文将通过一系列实例来探讨那些经常被忽略的陷阱,并对其进行深入...
Java面试笔记 225道Java面试题JAVA面试基础知识点总结Java数据结构题 JAVA笔试面试WORD资料汇总(19个): 2014年最新Java笔试题及答案.docx 225道Java面试题 学会了Java面试随你问.docx Ant和Maven的作用是什么?两者...
Java编程语言中,有一些细节和陷阱常常被开发者忽视,这些细节在基础复习中至关重要,特别是在应对考试或实际项目开发时。以下是一些关键知识点的详细解释: 1. **字符串对象的处理**:Java虚拟机(JVM)对于通过...
Java基础每日复习笔记-JavaSE高级阶段.edf
根据提供的文件信息,我们可以推断出这是一本关于Java程序员面试和笔试准备的书籍,作者为何昊。本书可能包含了大量关于Java编程语言的基础知识、高级特性以及与面试相关的技巧和策略等内容。下面将对可能涉及的重要...
java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx ...
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
这份"java笔记java笔试题 java面试题"的资源无疑是准备Java程序员的笔试和面试时的重要参考资料。以下是一些关键的Java知识点,这些内容可能会在笔记或面试中出现: 1. **Java基础**:Java的基础语法包括数据类型...
Java基础每日复习笔记-JavaSE基础阶段.edf
本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,旨在帮助初学者或有经验的开发者巩固和提升Java编程技能。 1. 面向对象(OOP):Java的核心是...
java面试笔试资料Java经典项目集锦java笔试题大集合及答案题库java笔试题汇总资料个合集(188) 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring...
Java EE的复习笔记是学习这个复杂框架的重要参考资料,尤其对于开发者来说,深入理解其核心概念和技术是必不可少的。 首先,Struts是Java EE中的一个MVC(Model-View-Controller)框架,它的主要任务是分离业务逻辑...
java面试笔试题库java笔试题大集合及答案互联网公司面试资料Java面试问题集大全合集(200个): JavaEE学习笔记.pdf java_Java_学习笔记.pdf Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁....
java面试笔试题库java软件设计java笔试题大集合及答案文档资料合集300MB“ 100家大公司java笔试题汇总.doc 125条常见的java 面试笔试题大汇总.pdf 2011最新整理java经典代码.doc 25个经典的Spring面试问答.docx 8张...
这份《Java基础复习笔记.docx》提供了全面的复习材料,涵盖了Java编程的基础至进阶概念,对于那些希望提升Java技能的学习者来说是宝贵的资源。 首先,笔记详细介绍了Java的基本数据类型,包括整型(如int)、浮点型...
Java期末复习笔记.md