今天经历的一个事情太丢脸了, 一个学弟向我请教问题, 是这样的:

  一个字符串里面含有空格, 不允许使用.trim()和replace方法, 只用if和for将空格去掉, 题目很简单, 一开始我是这样写的:

        String s = "zhong hua ren min gong he guo";
String[] s1 = s.split("");
String s2 = "";
for(int i=;i<=s.length();i++) {
if(s1[i]==" ";) {
s1[i] = "";
}
s2 += s1[i];
}
System.out.println("原来的字符串为: "+s);
System.out.println("去掉空格之后的字符串为: "+s2);

但是发现运行之后还是原来的字符串, 没有任何改变, 顿时场面相当的尴尬啊, 检查了好几遍没发现有错的地方啊, 而且这个逻辑也可以啊, 没啥错误啊, 后来请教了一个本班同学, 给出了这样的代码

        String s = "zhong hua ren min gong he guo";
String[] s1 = s.split("");
String s2 = "";
for(int i=0;i<=s.length();i++) {
if(s1[i].equals(" ")) { }
else {
s2 += s1[i];
}
}
System.out.println("原来的字符串为: "+s);
System.out.println("去掉空格之后的字符串为: "+s2);

才给我解了个围, 回家再一想, 再三的肯定我写的代码是没有错误的, 当看到那个if语句的时候我就想给自己来一套天马流星拳了

  分割后的字符串数组中的元素属于重新定义了一个String, 与String s在存储中的内存地址已经不相同了, 用==来比较这两个值, 那就是真的自找难看了, 还是自己学的知识不够扎实, 以后多多注意吧! ! !

  网上的解释:

解释一下==号,他比较的是一个对象在内存中的地址值,
比如2个字符串对象
String s1 = new String("str");
String s2 = new String("str");
如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。 equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。 在Object类源码中是这样写的。
public boolean equals(Object obj) {
return (this == obj);
}
他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
} String里的方法,如果==号比较不相等,还会进行一下值的比较。
所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。 所以一定要记住:
"=="比较的是地址
"equals"比较的是值

亲, 我们来再重申一遍"=="和"equals的区别的更多相关文章

  1. Android Studio 每次运行都会再下载一遍,修改

    Android Studio 每次运行都会再下载一遍 把 gradle 设置 use local gradle distribution

  2. 最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础

    最近准备把安卓和java的知识再回顾一遍,顺便会写博客上!千变万化还都是源于基础,打扎实基础,加油吧 距离去北京还有23天

  3. 沉淀再出发:java中的equals()辨析

    沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆, ...

  4. dp 46(再做一遍)

    Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多 ...

  5. leetcode 逆转字符串 当年的第一题,今天再写一遍,物是人非

    public class Solution { public String reverseWords(String s) { if(s==null||s.length()==0) return &qu ...

  6. post提交表单的数据查看方式(不是很理解,但要会看,可以找人商讨下,比如崔老师,自己再看一遍HTTP基础)

  7. 再做一遍floyed

    #include<bits/stdc++.h> #define R register int using namespace std; const int inf=0x3f3f3f3f; ...

  8. python 操作元组 列表===python中三大宝刀(字典已经再上一遍 说过)

    字典俗称,世界有多大就能装多大 列表俗称,你们决定 元组俗称,可远观而不可亵玩焉 列表的相关操作a=['1','2','3','5','6','7']# print(a[0])# print(a[0: ...

  9. 再谈NULL和nullptr(C++11)区别

    在谈NULL和nullptr区别之前,我们先看段代码: #include "stdafx.h" #include <iostream> using namespace ...

随机推荐

  1. bzoj1034 泡泡堂

    Description 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵 ...

  2. C#调用Excel宏

    using System; using Excel = Microsoft.Office.Interop.Excel; namespace WindowsFormsApplication1 { /// ...

  3. pandas的merge函数

    pandas.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index= ...

  4. RNN总结

    RNN既可以表述为循环神 经网络(recurrent neural network),也可以表述为递归神经网络(recursive neural network),前者一般用于处理以时间序列为输入的问 ...

  5. 解决不能正常访问workerman的问题

    问题描述: 在阿里云ECS上部署了workerman的应用(ECS是专有网络),在ECS安全组里已经允许workerman需要的全部端口,但是外网一直不能正常打开(注,其他服务,比80端口外部是可以用 ...

  6. pig概述

    pig概述pig是一个用于并行计算的高级数据流语言和执行框架:类sql.文件处理框架:有一套和sql类似的执行语句,处理的对象是HDFS上文件.Pig的数据处理语言是数据流方式的,一步一步的进行处理: ...

  7. SparkStreaming 的编程模型

    依赖管理 基本套路 Dstream输入源 ---input DStream Dstream输入源--- Receiver 内置的input Dstream : Basic Source 内置的inpu ...

  8. android官方文档翻译(不断更新中。。。)

    最近在自学android,抽空把官方文档的guide跟training差不多看了一遍,又对比了一些书籍,感觉还是官方文档讲得比较好,所以自己计划把官方文档翻译一下,方便自己的知识巩固以及复习查找,由于 ...

  9. Ubuntu下mysql的卸载重装

    注:该方法是彻底删除ubuntu下面的文件,然后重新安装,更新root密码,所以mysql原数据会被删掉,所以一定一定要记得备份!!!!!!!! 转自:http://blog.csdn.net/chu ...

  10. python中__init__()、__new__()、__call__()、__del__()几个魔法方法的用法

    关于__new__()的用法参考: http://www.myhack58.com/Article/68/2014/48183.htm 正文: 一.__new__()的用法: __new__()是在新 ...