1、数据类型
* byte: 8-bit, -128 - 127.
* short: 16-bit, -32,768 - 32,767.
* int: 32-bit, -2,147,483,648 - 2,147,483,647.
* long: 64-bit, -9,223,372,036,854,775,808 - 9,223,372,036,854,775,807.
* float: 32-bit.
* double: 64-bit.
* boolean: true/false.
* char: 16-bit, '\u0000' (or 0) -'\uffff' (or 65,535).
2、String问题汇总
a、比较
String str1 = new String("abc");
String str2 = "abc";
String str3 = "abc";
System.out.println("str1 == str2:"+(str1 == str2));
System.out.println("str1.equals(str2):"+str1.equals(str2));
System.out.println("str2 == str3:"+(str2 == str3));
System.out.println("str2.equals(str3):"+str2.equals(str3));
//str1 = str1.intern();//(1)注释掉(2)不注释
String str4 = new String("abc");
System.out.println("str1 == str4:"+(str1 == str4));
System.out.println("str1.equals(str4):"+str1.equals(str4));
System.out.println("str1 == str2:"+(str1 == str2));
System.out.println("str1.equals(str2):"+str1.equals(str2));
System.out.println("str1 == str3:"+(str1 == str3));
System.out.println("str1.equals(str3):"+str1.equals(str3));
result:
(1)
str1 == str2:false
str1.equals(str2):true
str2 == str3:true
str2.equals(str3):true
str1 == str4:false
str1.equals(str4):true
str1 == str2:false
str1.equals(str2):true
str1 == str3:false
str1.equals(str3):true
(2)
str1 == str2:false
str1.equals(str2):true
str2 == str3:true
str2.equals(str3):true
str1 == str4:false
str1.equals(str4):true
str1 == str2:true
str1.equals(str2):true
str1 == str3:true
str1.equals(str3):true
原因如下:Java中String的运作方式,必须明确一点:String是一个非可变类(immutable)。
非可变类:简单说来,非可变类的实例是不能被修改的,每个实例中包含的信息都必须在该实例创建的时候就提供出来,并且在对象的整个生存周期内固定不变。
因此
1. String str1 = new String("abc");
2. Stirng str2 = "abc";
3. str1 = str1.intern();
对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。
对于第二种,jvm首先会在内部维护的strings pool中通过String的 equels 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。
对于第三:使用第一种方法创建对象时,jvm是不会主动把该对象放到strings pool里面的,除非程序调用 String的intern方法。而调用intern方法不管是在Stirng str2 = "abc"之前还是之后,均为相同的引用。
如此上面的问题就得到解决。
b、String 与 StringBuffer
String在做串接的话,要增长字符串,也就是要改变String的内部状态,这样会影响性能。
StringBuffer是可变的配套类,如果经常做串接的话,应该采用StringBuffer,它仅仅时改变了内部数据结构,而不会创建新的对象,因此性能上有很大的提高。
分享到:
相关推荐
Java 基础知识总结 Java 是一种广泛使用的编程语言,由 Sun 公司的 James Gosling 等人于 1991 年开始开发。Java 有三种技术架构:JavaEE、JavaSE 和 JavaME。JavaSE 是桌面应用程序的开发基础,JavaEE 是企业环境...
这篇“Java基础知识总结(经典)”涵盖了Java开发中的核心概念和重要知识点,旨在为初学者和有经验的开发者提供一个全面的回顾。以下是主要的学习点: 1. **Java环境配置**:在开始编程之前,必须安装Java ...
### Java基础知识总结 #### Java 入门概述 Java 作为一种广泛应用的编程语言,自1995年由 Sun Microsystems 发布以来,迅速成为了软件开发领域的主流技术之一。Java 的诞生不仅推动了软件行业的进步,还引领了一...
JAVA基础知识总结 JAVA基础知识总结 JAVA基础知识总结
Java 基础知识总结是 Java 程序员不可或缺的一部分,本总结将涵盖 Java 的基础知识,包括 Java 概述、Java 语法基础、变量、数据类型、运算符、控制语句、方法、数组、继承、多态、接口、异常、IO 流等。 一、Java ...
Java基础知识总结涵盖了Java程序设计语言的核心概念和常用知识点。在详细学习和总结这些知识点之前,首先需要对Java有一个整体的认识。Java是一种面向对象的编程语言,它具有跨平台的特性,即“一次编写,到处运行”...
2024版Java基础知识总结(超详细整理)2024版Java基础知识总结(超详细整理)2024版Java基础知识总结(超详细整理)2024版Java基础知识总结(超详细整理)2024版Java基础知识总结(超详细整理)2024版Java基础知识...
jdk,eclipse使用,循环,数组,基础API,面向对象,循环,运算符,关键字,String详解,IO流
### Java基础知识总结(绝对经典) #### 一、Java概述 - **起源与发展**:Java语言始于1991年Sun公司的James Gosling等人所开发的Oak语言,原计划用于控制嵌入式设备如有线电视交换盒和个人数字助理(PDA)。1994年...
### Java基础知识总结 #### 一、Java概述 Java是由Sun Microsystems公司(现已被Oracle收购)在1991年由James Gosling领导的团队所开发的一种面向对象的编程语言。最初被命名为Oak,目的是为了控制嵌入式设备和...
自己在网上找的相对好一点的java复习资料,留个纪念 。详细讲述了Java课程的知识点
### Java基础知识总结 #### 一、Java概述 Java是一种广泛使用的高级编程语言,它由Sun Microsystems公司的James Gosling等人在1991年开始开发,并最初命名为Oak。Oak旨在用于控制嵌入式设备如有线电视交换盒和个人...
Java是一种广泛使用的面向对象的编程语言,其基础知识涵盖了多个方面,包括语法、面向对象特性、异常处理、多线程...以上只是Java基础知识的一个概述,每个话题都值得深入探讨和实践,不断学习和总结是提升技能的关键。