累积下学习 C#时和 Java时的不同点

  1. ==和equals()方法的区别:

首先有一个观点: 这两个都是用来比较值是否相等的 ( 这里的值有时候指的是地址值, 有时候是存储的值; 下面将地址值称为地址, 存储的值称为值 )

在Java中:

对于值类型: ==比较的是值, equals()方法比较的也是值 ( 不过值类型需要手动装箱后才能调用方法 )

对于非 Object的引用类型: ==比较的是地址, equals()方法比较的是值 ( 在 Object 类中比较的是地址, 如果类中重写了 equals()方法, 就像根据重写的内容进行比较判断 )

在 C#中:

对于值类型: ==比较的是值, equals()方法比较的也是值 ( 这里的值类型调用方法会自动装箱 )

对于非Object类的引用类型: ==比较的是地址, equals()方法比较的是值 ( 在 Object 类比较的是地址, 如果类中重写了equals()方法, 就根据重写的内容进行比较判断 )

但是 C#中有个特例, 就是 string 类型, 对于 string类型, ==和 equals()方法比较的都是值, 而不是地址. ( 这点要牢记; 但是我还是习惯按照Java中的规则来比较两个string类型的内容是否相等, 就是调用equals()方法, 而不是使用== )

时间: 2025-01-05 21:49:01

累积下学习 C#时和 Java时的不同点的相关文章

Ant学习-001-ant 执行 TestNG 测试用例时 [testng] java.lang.NoClassDefFoundError: com/beust/jcommander/ParameterException 解决方案

Apache Ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发.由Apache软件基金会所提供. 在日常的 Java 开发应用中,使用较为广泛(类似的项目构建工具还有 maven,感兴趣的可自行了解),同时也多是持续集成框架中的组成成员,因打算打造自己的自动化测试集成框架,因而今天尝试了一下(感谢大神 伟神 提供的 build.xml 文件和此过程中的远程支持,非常感谢!) 今天学习 ant 构建应用,通过 ant 执行 TestNG 测

pycharm下修改项目名称或者删除项目时:弹窗报提示java.io.IOException: Couldn't delete

主要原因是项目中selenium用到的chromedriver插件没有完全关闭(没有输入正确的开启/关闭chromedriver代码). 电脑的进程中残留了很多的chromedriver.exe进程,而项目本身与这些进程关联着所以不能修改或删除. 解决办法: 打开任务管理器,在进程下搜索chromedriver.exe进程,结束这个进程后,在pycharm下可以删除想删除的文件了. pycharm下修改项目名称或者删除项目时:弹窗报提示java.io.IOException: Couldn't

linux下vi或vim编辑文件时提示Found a swap file by the name的原因及解决方法

在linux下用vi或vim打开test.java文件时 [[email protected] test]# vi test.java 出现了如下信息: E325: ATTENTION     Found a swap file by the name ".test.java.swp"             owned by: root   dated: Wed Dec  7 13:52:56 2011         file name: /var/tmp/Test.java  

使用eclips开发java时的闪退问题

最近开始android的开发学习,当然要先从java入手了.我选择eclips作为开发的IDE,在测试java代码样例时,如果我的代码是可以出现系统自动代码补齐时eclips就会立刻闪退. 刚开始不知道怎么回事以为是自己不小心误操作吧界面给关了,可是发生了好几次.之后通过shell把eclips启动,这时可以看到eclips闪退时的log: [email protected]:~/android/eclipse$ ./eclipse ## A fatal error has been detec

tomcat dbcp 基于jndi配置时出现java.sql.SQLException: Already closed

最近观察生产环境发现一个现象,一段时间不操作,再重新操作时,数据库连接第一次会出现:java.sql.SQLException: Already closed.,如下: 数据源是用tomcat dbcp 基于jndi配置管理的,查了下,如下: 原因: You're probably running into the fact that MYSQL closes connections  which have been open "too long". Probably if you m

Linux学习笔记——如何在交叉编译时使用共享库

0.前言 在较为复杂的项目中会利用到交叉编译得到的共享库(*.so文件).在这种情况下便会产生以下疑问,例如: [1]交叉编译时的共享库是否需要放置于目标板中,如果需要放置在哪个目录中. [2]交叉编译时的共享库是否需要放置于宿主机中,如果需要放置于哪个目录中. [3]交叉编译时如何指定共享库 [4]程序运行时如何查找共享库 等等问题. 博文总结了使用共享库的一般方法,并通过一个例子说明问题.如果已经有了交叉编译好的共享库,可以从[2]开始,步骤[1]只是为了说明问题,捏造一个简单的共享库试图说

Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.Life

Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.LifecycleException: Failed to start component[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/项目名]] 一个很简单的项目,没有出现编译错误,从Eclipse中用Tomcat v

连接mysql时提示java.sql.SQLException: Access denied for user 'root'@'DESKTOP-N2B2D9A' (using password: YES)

用root连接mysql时提示:访问被拒绝 检查一下mysql server是否开启,发现后台在运行着..  然后查了一下mysql的用户表,发现root只能运行使用本地ip(localhost或者127.0.0.1)进行连接 解决方法:新开一个权限GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'jeffw' WITH GRANT OPTION; 然后查询一下:select * from user; 新开的root的已经开启权限,

[算法]面试时的Java数据结构与算法

查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在面试中最常考的是快速排序和归并排序,并且经常有面试官要求现场写出这两种排序的代码.对这两种排序的代码一定要信手拈来才行.还有插入排序.冒泡排序.堆排序.基数排序.桶排序等. 面试官对于这些排序可能会要求比较各自的优劣.各种算法的思想及其使用场景.还有要会分析算法的时间和空间复杂度.通常查找和排序算法