- 浏览: 265742 次
- 性别:
- 来自: 大连
-
文章分类
最新评论
-
saishangxue123:
文章写的清楚、明了,一气呵成,支持
什么是反射、反射能干什么、如何使用反射? -
allen3010:
1,2,3,4,5这六个数字。。。。。
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列
Java代码
String s = new String(“abc”);
String s1 = ”abc”;
String s2 = new String(“abc”);
System.out.println(s == s1);
System.out.println(s == s2);
System.out.println(s1 == s2);
String s = new String(“abc”);
String s1 = “abc”;
String s2 = new String(“abc”);
System.out.println(s == s1);
System.out.println(s == s2);
System.out.println(s1 == s2);
请问以上程序执行结果是什么?
第一句执行后内存中有两个对象,而不是一个。一个由new String(“abc”)中的”abc”在String Pool里生成一个值为”abc”的对象;第二个由new在堆里产生一个值为”abc”的对象,该对象完全是String Pool里的”abc”的一个拷贝。变量s最后指向堆中产生的”abc”对象;
第二句执行时,s1先去String Pool找是否有值为”abc”的对象,很显然在上一步中java已经在String Pool里生成一个”abc”对象了,所以s1直接指向String Pool中的这个”abc”;
第三句中又有一个new,在java中凡遇到new时,都会在堆里产生一个新的对象。因此,该句执行后堆里又多了一个”abc”对象,这与执行第一句后生成的”abc”是不同的两个对象,s2最后指向这个新生成的对象。
因此,执行后面的打印语句的结果是三个false
问题2:
Java代码
System.out.println(s == s.intern());
System.out.println(s1 == s1.intern());
System.out.println(s1.intern() == s2.intern());
System.out.println(s == s.intern());
System.out.println(s1 == s1.intern());
System.out.println(s1.intern() == s2.intern());
请问以上程序执行结果是什么?
设s为String类型的变量,当执行s.intern()时,java先在String Pool里找与字符串变量s相等(用equals()方法)的字符串,若有则将其引用返回;若没有则在String Pool里创建一个与s的值相等的字符串对象,并将其引用返回。从中我们可以总结出intern()方法无论如何都将返回String Pool里的字符串对象的引用。
因此,以上程序执行的结果是false,true,true。
PS:设s和t为两个字符串变量,若有s.equals(t),必有s.intern() == t.intern();
PS:”==”永远比较的是两边对象的地址是否相等。
问题3:
Java代码
String hello = ”hello”;
String hel = ”hel”;
String lo = ”lo”;
System.out.println(hello == ”hel” + ”lo”);
System.out.println(hello == ”hel” + lo);
String hello = “hello”;
String hel = “hel”;
String lo = “lo”;
System.out.println(hello == “hel” + “lo”);
System.out.println(hello == “hel” + lo);
请问以上程序执行结果是什么?
前三句在String Pool里分别产生“hello”、“hel”、“lo”三个常量字符串对象
当做第一个加法连接时,+号两边都是常量字符串,java就会将两者拼起来后到String Pool里找与之相等(用equals)的字符串,若存在则将其地址返回;不存在则在String Pool里新建一个常量对象,其值等于拼接后的字符串,并将其地址返回。
第二个+号两边有一个是变量,此时,java会在堆里新建一个对象,其值是两字符串拼接后的值,此时返回的地址是堆中新对象的地址。
所以,第一句做+连接后返回String Pool中“hello”的地址,显然与变量hello的地址相等;
第二句返回的是堆中地址,显然与变量hello的地址不等;
Java的String,StringBuffer,StringBuilder有什么区别?
那就是:String是不可变类(immutable),每次在String对象上的操作都会生成一个新的对象;StringBuffer和StringBuilder则允许在原来对象上进行操作,而不用每次增加对象;StringBuffer是线程安全的,但效率较低,而StringBuilder则不是效率最高。
这个答案我是很早都知道的,而且实际应用中也是这样做的,经常变化的时候用StringBuilder或者StringBuffer。但是为什么是这样的是最近才晓得的,而了解的方法非常简单,就是阅读jdk的源代码:
String和StringBuffer,StringBuilder都是用字符数组来表示的。但是在String中这个字符数组是这样定义的:
/** The value is used for character storage. */
private final char value[];
而在StringBuffer和StringBuilder中,这个字符数组都是继承于java.lang.AbstractStringBuilder中的
/**
* The value is used for character storage.
*/
char value[];
这样答案就很明显了,原因就在这个final关键字上。
而同时通过源代码可以发现StringBuffer的很多方法和属性都有synchronized关键字修饰,而StringBuilder则没有。
String s = new String(“abc”);
String s1 = ”abc”;
String s2 = new String(“abc”);
System.out.println(s == s1);
System.out.println(s == s2);
System.out.println(s1 == s2);
String s = new String(“abc”);
String s1 = “abc”;
String s2 = new String(“abc”);
System.out.println(s == s1);
System.out.println(s == s2);
System.out.println(s1 == s2);
请问以上程序执行结果是什么?
第一句执行后内存中有两个对象,而不是一个。一个由new String(“abc”)中的”abc”在String Pool里生成一个值为”abc”的对象;第二个由new在堆里产生一个值为”abc”的对象,该对象完全是String Pool里的”abc”的一个拷贝。变量s最后指向堆中产生的”abc”对象;
第二句执行时,s1先去String Pool找是否有值为”abc”的对象,很显然在上一步中java已经在String Pool里生成一个”abc”对象了,所以s1直接指向String Pool中的这个”abc”;
第三句中又有一个new,在java中凡遇到new时,都会在堆里产生一个新的对象。因此,该句执行后堆里又多了一个”abc”对象,这与执行第一句后生成的”abc”是不同的两个对象,s2最后指向这个新生成的对象。
因此,执行后面的打印语句的结果是三个false
问题2:
Java代码
System.out.println(s == s.intern());
System.out.println(s1 == s1.intern());
System.out.println(s1.intern() == s2.intern());
System.out.println(s == s.intern());
System.out.println(s1 == s1.intern());
System.out.println(s1.intern() == s2.intern());
请问以上程序执行结果是什么?
设s为String类型的变量,当执行s.intern()时,java先在String Pool里找与字符串变量s相等(用equals()方法)的字符串,若有则将其引用返回;若没有则在String Pool里创建一个与s的值相等的字符串对象,并将其引用返回。从中我们可以总结出intern()方法无论如何都将返回String Pool里的字符串对象的引用。
因此,以上程序执行的结果是false,true,true。
PS:设s和t为两个字符串变量,若有s.equals(t),必有s.intern() == t.intern();
PS:”==”永远比较的是两边对象的地址是否相等。
问题3:
Java代码
String hello = ”hello”;
String hel = ”hel”;
String lo = ”lo”;
System.out.println(hello == ”hel” + ”lo”);
System.out.println(hello == ”hel” + lo);
String hello = “hello”;
String hel = “hel”;
String lo = “lo”;
System.out.println(hello == “hel” + “lo”);
System.out.println(hello == “hel” + lo);
请问以上程序执行结果是什么?
前三句在String Pool里分别产生“hello”、“hel”、“lo”三个常量字符串对象
当做第一个加法连接时,+号两边都是常量字符串,java就会将两者拼起来后到String Pool里找与之相等(用equals)的字符串,若存在则将其地址返回;不存在则在String Pool里新建一个常量对象,其值等于拼接后的字符串,并将其地址返回。
第二个+号两边有一个是变量,此时,java会在堆里新建一个对象,其值是两字符串拼接后的值,此时返回的地址是堆中新对象的地址。
所以,第一句做+连接后返回String Pool中“hello”的地址,显然与变量hello的地址相等;
第二句返回的是堆中地址,显然与变量hello的地址不等;
Java的String,StringBuffer,StringBuilder有什么区别?
那就是:String是不可变类(immutable),每次在String对象上的操作都会生成一个新的对象;StringBuffer和StringBuilder则允许在原来对象上进行操作,而不用每次增加对象;StringBuffer是线程安全的,但效率较低,而StringBuilder则不是效率最高。
这个答案我是很早都知道的,而且实际应用中也是这样做的,经常变化的时候用StringBuilder或者StringBuffer。但是为什么是这样的是最近才晓得的,而了解的方法非常简单,就是阅读jdk的源代码:
String和StringBuffer,StringBuilder都是用字符数组来表示的。但是在String中这个字符数组是这样定义的:
/** The value is used for character storage. */
private final char value[];
而在StringBuffer和StringBuilder中,这个字符数组都是继承于java.lang.AbstractStringBuilder中的
/**
* The value is used for character storage.
*/
char value[];
这样答案就很明显了,原因就在这个final关键字上。
而同时通过源代码可以发现StringBuffer的很多方法和属性都有synchronized关键字修饰,而StringBuilder则没有。
发表评论
-
java时间大小比较
2015-04-02 21:48 1015摘自: http://blog.sina.com.cn/s/b ... -
StringBuffer的常用方法
2015-03-30 16:06 1022摘自:http://blog.csdn.net/deaful/ ... -
什么是反射、反射能干什么、如何使用反射?
2013-08-16 00:03 4904//来源互联网 一、什 ... -
Class.forName···关于Class. 的应用介绍
2013-08-15 23:36 1231//摘自互联网 Class.forName(xxx.xx ... -
java泛型map的用法(转2)
2013-07-25 23:04 92501.声明一个map: Map map = ne ... -
java泛型map的用法(转)
2013-07-25 22:56 3163http://www.apkbus.com/blog-2079 ... -
关于日期 Date Calendar
2013-07-23 22:46 1179import java.security.Timestam ... -
正则表达式 例子
2013-07-22 23:00 864import java.util.regex.Matche ... -
Iterator的使用方法
2013-07-18 21:45 0import java.util.*; publ ... -
泛型的写法种种
2013-07-18 21:41 1081public class Generics<T> ... -
ArrayList ,LinkedList, TreeSet的使用方法
2013-07-18 21:35 2371import java.util.*; public ... -
Stack的使用方法
2013-07-18 21:26 1418import java.util.Stack; ... -
Hashtable的使用方法介绍
2013-07-18 21:24 23541**************************** ... -
老式枚举的使用方法
2013-07-18 21:23 996import java.util.Enumeration; ... -
java中Map的各种排序介绍
2013-07-14 13:24 1773//本篇来源于互联网 HashMap: 最常用的Ma ... -
java配置文件用法
2013-04-14 22:43 1347package cn.com.mfsoft.config; ... -
java利用反射得到实例
2013-04-10 22:44 1319对于面向接口编程的项目免不了要一反射相接触,动态得到实例: ... -
spring的beanFactory和factoryBean
2013-04-05 16:10 2192spring的beanFactory和factoryBe ... -
Spring配置文件总结
2013-04-05 16:05 929Spring配置文件总结(转) 2010-06-07 23: ... -
Spring 的微内核与FactoryBean扩展机制
2013-04-05 15:49 1693Spring 的微内核与FactoryBean扩展机制 ...
相关推荐
在Java编程语言中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。由于字符串在实际开发中的重要性和高频使用特性,深入理解并掌握其用法至关重要。本文档将对`String`类型的一些关键知识点进行...
初学者用于JAVA中int、String的类型转换的几种方法 并说明这其中的区别。
- **Unicode编码**: Java中的`String`默认使用Unicode编码,这使得`String`对象可以很好地支持国际化和多语言环境。 #### 七、深入探讨 - **Unicode与不同字符集的转换**: Unicode是一种通用的字符编码标准,而...
在Java编程语言中,`char`和`String`是处理文本数据的关键类型。`char`代表单个字符,而`String`则用于存储一串字符。本文将详细介绍`char`和`String`相关的函数方法,帮助新手更好地理解和使用它们。 对于`char`...
标题中提到的“java判断String类型是否能转换为int的方法”,是指在Java编程语言中,如何编写代码来判断一个String类型的变量是否能够被转换成一个int类型的数值。在Java中,String到int的转换是一个常见的需求,...
本文将深入探讨Java枚举类型的特性和用法,并通过具体实例说明其优势所在。枚举类型在Java中的引入标志着一种更为类型安全且灵活的编程方式。 #### 二、Java枚举的基本概念 Java中的枚举是一种特殊的类,用于定义...
除了Math类和String类,课件中还提及了枚举类型、从控制台读入数据和格式化输出,但这些部分内容未展示完整,因此无法详细说明。简要提及的话,枚举类型是Java中一种数据类型,用于定义一组命名常量;从控制台读入...
以下是对`String`类中一些常用方法的详细说明: 1. **获取** - `int length()`: 返回字符串中的字符数,即字符串的长度。 - `char charAt(int index)`: 根据给定的索引获取字符串中的相应字符。 - `int indexOf...
以下是对标题和描述中提到的一些Java String类的方法的详细说明: 1. `length()`:这个方法返回字符串的长度,即其中字符的数量。例如: ```java char[] chars = {'a', 'b', 'c'}; String s = new String(chars)...
在实际编程中,我们需要了解每种基本类型的特点和使用场景,以便更好地使用它们。 7. 实践练习 创建一个测试类,用于测试基本类型的取值范围。 例如: public class Test1_Scope { public static void main...
StringBuffer 在内部维护了一个字符数组来保存字符串,并提供了多种方法允许我们插入、删除或替换字符,因此非常适合在多线程环境中使用。 #### 二、线程安全性 - **StringBuffer**:由于提供了线程安全机制,因此...
本资源“Java中使用JSON格式数据工具类及使用说明”提供了关于如何在Java中处理JSON数据的方法,包括将JSON数据转化为Java对象以及对特殊数据类型的处理,特别是时间格式化。以下是关于这些知识点的详细说明: 1. *...
Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...
Java Excel API 入门使用说明 Java Excel API,简称 JXL,是一个开源框架,用于动态读写 Excel 文件。利用 JXL,可以在任何支持 Java 的操作系统上动态读写 Excel 文件。下面将详细介绍 JXL 的使用方法和相关知识点...
Java 中的变量可以分为两种:值类型和引用类型。值类型的变量直接存储在栈中,而引用类型的变量在栈中仅仅存储引用类型变量的地址,而其本身则存储在堆中。 equals 操作表示的是两个变量是否是对同一个对象的引用,...
Java中的String是一个非常重要的类,它提供了两种创建方式和一种特殊的存储机制(String intern pool),并且String类中声明了一个char[]数组和一个int类型的变量hash,用于存储字符串的内容和哈希值。
### Java编程中对象的创建与使用以及方法的重构与重载的区别说明 #### 对象的创建与使用 在Java编程语言中,一切皆基于对象。理解如何创建对象以及如何使用对象是学习Java的基础。 ##### 1. 对象的创建过程 创建...
为了深入了解"DmailHandle"的具体用法,你可以查阅`消息邮件java接口使用说明.pdf`文件,它应该提供了详细的API文档和示例代码。同时,学习Java Mail API的基本概念也会对理解这个特定接口的使用大有裨益。记得在...
这说明在Java中,局部变量的作用域仅限于其声明的代码块。 2. **异常处理:** - `IOException`是Java中的一个异常类,当进行I/O操作时可能会抛出此类异常。根据Java异常处理机制,任何未捕获的异常都必须显式地抛...
本教程将深入讲解如何在Java项目中使用JxBrowser。 一、JxBrowser简介 JxBrowser是一款由TeamDev公司开发的Java库,它提供了与Google Chrome浏览器相同的渲染引擎,确保了对HTML5、CSS3和JavaScript的良好支持。它...