今天分享一下关于最近面试的问题,临近春节,而我在茫茫人海中奔波,今天面试了来到了中关村科技园,挺气派的,之前也是在外面看看,今天就去了,心里有点激动,恰好,正好赶上了上班时,看见它们的努力,我感到再累也值!

废话不说了,我就说一下今天遇到的面试题,感到自己有点危机感,之后下来我在这里总结总结:

String 与Integer 相关的问题;

第一题:

//Integer n1 = new Integer(11);
//Integer n2 = new Integer(11); //Integer n3 = 11;
//Integer n4 = 11;
//System.out.println(n1 == n2); false
//System.out.println(n1 != n2); true //System.out.println(n3 == n4); true
//System.out.println(n3 != n4); false //String str1 = "1234";
//String str2 = new String("1234"); //System.out.println(str1 == str2); false
//System.out.println(str1.equals(str2)); true //System.out.println("12" + "34" == "1234"); true

第二题:

public class Test1{
String str = new String("good");
char[] ch = {'a','b','c'};
public static void main(String[] args){
Test1 test1 = new Test1();
test1.changer(test1.str,test1.ch);
System.out.print(test1.str+" and ");
System.out.print(test1.ch);
}
public void changer(String str,char ch[]){
str = "test ok";
ch[0] = 'g';
}
}

这个我需要把print给贴出来:

public void print(char s[]) {
write(s);
} private void write(char buf[]) {
try {
synchronized (this) {
ensureOpen();
textOut.write(buf);
textOut.flushBuffer();
charOut.flushBuffer();
if (autoFlush) {
for (int i = 0; i < buf.length; i++)
if (buf[i] == '\n')
out.flush();
}
}
}
catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
}
catch (IOException x) {
trouble = true;
}
}

输出为 good and gbc(而不是地址)

总结:

Integer:

Integer.valueOf(11) 比直接 new Integer(11) 性能更好,因为valueOf直接从缓存中返回Integer对象,只有数字在>=-128 && <=127这个区域会直接读缓存,否则调用new Integer新创建一个对象.所以说valueOf性能更好.因为它一开始就被缓存了.

 public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
private static class IntegerCache {
private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}

String

1、String类是final的,不可被继承。

2、String类是的本质是字符数组char[], 并且其值不可改变。

3、String类对象有个特殊的创建的方式,就是直接指定比如String x = “abc”,”abc”就表示一个字符串对象。而x是”abc”对象的地址,也叫做”abc”对象的引用。

4、String对象可以通过“+”串联。串联后会生成新的字符串。

5、Java运行时会维护一个String Pool(String池),JavaDoc翻译很模糊“字符串缓冲区”。String池用来存放运行时中产生的各种字符串,并且池中的字符串的内容不重复。而一般对象不存在这个缓冲池,并且创建的对象仅仅存在于方法的堆栈区。

6、创建字符串的方式很多,归纳起来有三类:

其一,使用new关键字创建字符串,比如String s1 = new String(“abc”);

其二,直接指定。比如String s2 = “abc”;

其三,使用串联生成新的字符串。比如String s3 = “ab” + “c”;

String 是如何创建的

原理1:

当使用任何方式来创建一个字符串对象s=X时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串s,否则,不在池中添加。

原理2:

Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。

String str1 = “abc”;

步骤:

1) 栈中开辟一块空间存放引用str1;

2) String池中开辟一块空间,存放String常量”abc”;

3) 引用str1指向池中String常量”abc”;

4) str1所指代的地址即常量”abc”所在地址

String str2 = new String(“abc”);

步骤:

1) 栈中开辟一块空间存放引用str2;

2) 堆中开辟一块空间存放一个新建的String对象”abc”;

3) 引用str2指向堆中的新建的String对象”abc”;

4) str2所指代的对象地址为堆中地址,而常量”abc”地址在池中

4.”abc”.equals(str)和str.equals(”abc”)的区别

“abc”.equals(str)避免空指针异常。

如果str为空,str.equals(”abc”)就会报空指针异常。

所以在字符串比较的时候一定要用”abc”.equals(str)。

今天就总结到““后续有更多精彩!

String与Integer问题的更多相关文章

  1. 【leetcode】String to Integer (atoi)

    String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully consider ...

  2. No.008 String to Integer (atoi)

    8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...

  3. 【LeetCode】7 & 8 - Reverse Integer & String to Integer (atoi)

    7 - Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 Notic ...

  4. leetcode第八题 String to Integer (atoi) (java)

    String to Integer (atoi) time=272ms   accepted 需考虑各种可能出现的情况 public class Solution { public int atoi( ...

  5. leetcode day6 -- String to Integer (atoi) &amp;&amp; Best Time to Buy and Sell Stock I II III

    1.  String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully con ...

  6. String to Integer (atoi) - 字符串转为整形,atoi 函数(Java )

    String to Integer (atoi) Implement atoi to convert a string to an integer. [函数说明]atoi() 函数会扫描 str 字符 ...

  7. Kotlin实现LeetCode算法题之String to Integer (atoi)

    题目String to Integer (atoi)(难度Medium) 大意是找出给定字串开头部分的整型数值,忽略开头的空格,注意符号,对超出Integer的数做取边界值处理. 方案1 class ...

  8. LeetCode--No.008 String to Integer (atoi)

    8. String to Integer (atoi) Total Accepted: 112863 Total Submissions: 825433 Difficulty: Easy Implem ...

  9. leetcode-algorithms-8 String to Integer (atoi)

    leetcode-algorithms-8 String to Integer (atoi) Implement atoi which converts a string to an integer. ...

随机推荐

  1. Envoy 源码分析--network L4 filter manager

    目录 Envoy 源码分析--network L4 filter manager FilterManagerImpl addWriteFilter addReadFilter addFilter in ...

  2. SQL Pretty Printer for SSMS 很不错的SQL格式化插件

    写SQL语句或者脚本时,看到凌乱的格式就头大了,于是决心找一款SQL语句格式化的工具. 功夫不负有心人还真的被我找到一款很好用,很方便的SQL Server插件:SQL Pretty Printer ...

  3. PAT 1148 Werewolf - Simple Version

    1148 Werewolf - Simple Version (20 分)   Werewolf(狼人杀) is a game in which the players are partitioned ...

  4. 采用梯度下降优化器(Gradient Descent optimizer)结合禁忌搜索(Tabu Search)求解矩阵的全部特征值和特征向量

    [前言] 对于矩阵(Matrix)的特征值(Eigens)求解,采用数值分析(Number Analysis)的方法有一些,我熟知的是针对实对称矩阵(Real Symmetric Matrix)的特征 ...

  5. 【cogs247】售票系统【线段树】

    售票系统 输入文件:railway.in 输出文件:railway.out 时间限制:1 s 内存限制:128 MB [问题描述] 某次列车途经C个城市,城市编号依次为1到C,列车上共有S个座位,铁路 ...

  6. 前端必备之Node+mysql+ejs模版如何写接口

    前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...

  7. 四、Linux的常用命令

    linux常用命令可以参考这位前辈的:https://www.cnblogs.com/gaojun/p/3359355.html 这篇博文介绍的比较详细!

  8. SpringBoot配置ActiveMQ

    1.添加依赖 <!-- activeMQ --> <dependency> <groupId>org.springframework.boot</groupI ...

  9. TreeSet VS HashSet VS LinkedHashSet; TreeMap VS HashMap VS LinkedHashMap

    From online resources Set HashSet is much faster than TreeSet (constant-time versus log-time for mos ...

  10. HTML DOM 的nodeType属性

    在HTML DOM中每一部分都是节点: HTML元素是元素节点 HTML中属性是属性节点 文本是文本节点 注释是注释节点 这时我们要给它区分开我们就可以使用HTML DOM的nodeType属性 no ...