今天和同事讨论一道面试题:“是否有办法禁用String的equals方法?”
有两个一下子就能想到的办法:
1,修改源码重新打包。
2,利用类加载器加载一个虚假的类。(此方法如果我没记错的话,应该是不可行的,java虚拟机上有详细介绍)
然后如果不用这两种办法,而是在代码级别是否可以解决呢?
我首先想到的就是是否可以利用String类在JVM中的class对象来解决,其实也就是反射机制。我在Method类里找到了一个setAccessible方法,尝试了下:
String test = "hello world!";
Method[] methods = String.class.getMethods();
for(Method method : methods) {
if(method.getName().equals("equals")) {
System.out.println(method.isAccessible());
method.setAccessible(false);
}
}
System.out.println(test.equals("hello world!"));
结果证明这个方法是不可行的,我查找了些资料,setAccessible其实是设置当JVM做反射时是否做安全检查,而不是该方法是否能够被访问。
我就此郁闷了,想不出还有什么方向可以考虑的。
求帮助。
分享到:
相关推荐
"八数码难题求解"是一种经典的逻辑谜题,也被称为滑块拼图或15拼图。在这个游戏中,一个3x3的网格包含了1到8的数字和一个空格,目标是通过移动数字来达到预设的目标布局。在这个特定的项目中,开发者使用Visual ...
《摩天大楼:摩天大楼难题求解器》是一款基于C++编程语言开发的逻辑解谜游戏。在这款游戏中,玩家需要解决被称为“摩天大楼”(Skyscrapers)的智力挑战。摩天大楼难题源于经典的数独游戏,但加入了更丰富的视觉元素...
可调整大小的数独难题求解器,使用迭代蛮力算法,该算法将包含难题尺寸的文本文件作为输入,然后将数独难题本身添加为未解决的“空”正方形中的零,并迭代找到解决方案。 ,然后打印解决方案以及运行时。 由Andrea...
8拼图解算器使用堆(优先级队列)和A *搜索算法的8难题求解器该项目是普林斯顿大学Coursera的Algorithms I课程的一部分。 完整的作业规范可以在以下位置找到: : 8-puzzle是一款经典游戏,其中将图块1-8放置在3 x 3...
Perl难题求解器 输入大小:9x9字符1-9 16x16字符AP 25x25字符AY 36x36字符0-9,AZ 36x36网格适用于的当前字符集 要获得一种解决方案:./solve.plx 16x16_three_solutions 要获得每个解决方案,请使用“ -a”:./...
这个项目名为"SudokuSolver",它是一个基于Python实现的数独难题求解器,采用了回溯(BackTracking)算法来解决复杂的数独问题。 回溯算法是一种试探性的解决问题的方法,它尝试分步地找出问题的所有可能解决方案,...
在这个项目中,我们将深入探讨如何使用Java编程语言实现一个基于递归回溯算法的数独难题求解器。递归回溯是一种在搜索解决方案时,如果当前路径无法得出正确结果,则回溯到上一步并尝试其他可能性的方法。 首先,...
8拼图具有DFS,BFS,IDS,UCS,A *,IDA *,双向A *策略的8难题求解器,具有线性冲突水平函数。跑主要类是Puzzle.java,此文件中有一些初始状态的实例。 该文件中也有一个目标状态。8-拼图实例简单实例从1移到10 int...
八数码难题,也被称为滑动拼图或15拼图,是一种经典的逻辑谜题,源自19世纪。在这个游戏中,玩家需要通过空格移动数字方块,使得它们按照特定的顺序排列。通常,目标是将打乱的1到8的数字方块(加上一个空白方格)...
#### A*算法求解过程 1. **初始化**:设置开放列表(Open list)和关闭列表(Closed list),并将起始节点加入开放列表。 2. **循环执行**: - 从未访问的节点中选取f值最小的节点作为当前节点。 - 将当前节点移...
最初的难题假设所有人最初都在河的左侧,但是求解器可以求解任何给定的初始配置。 筏子一次最多只能搭载2人,只有母亲,父亲和警察知道如何操纵筏子。 如果没有母亲在场,父亲在处理女儿方面会遇到麻烦,同样,在...
给定的代码片段是使用Java实现的一个八数码难题求解程序,主要采用深度优先搜索算法来寻找解。 ##### 2.1 主类 `test` 主类`test`定义了初始状态和目标状态,并且执行了深度优先搜索算法。 - **成员变量**: - `...
在IT领域,八数码难题...通过以上步骤,我们可以用C++实现一个完整的八数码难题求解器。这个程序不仅锻炼了编程技巧,也体现了算法设计和问题解决能力。对于学习和理解C++以及算法应用来说,这是一个很好的实践项目。
这个求解器的独特之处在于它支持三种不同的编程语言,这可能是C#、Python、Java或其他流行的编程语言。C#标签表明至少其中一种实现是用C#编写的,这是一种现代、面向对象的编程语言,广泛应用于Windows平台的软件...
8难题,又称滑块谜题或15拼图,是一个经典的逻辑游戏,玩家需要通过滑动方块在空格上移动,最终将打乱的数字排列成预设的顺序。A*(A star)算法是一种广泛应用的路径搜索算法,尤其适用于解决这类问题。在这个场景...
八数码难题,又称滑动拼图游戏,是一个经典的逻辑谜题。在这个游戏中,玩家需要通过移动数字方块,将一个初始的打乱顺序的8个数字方块(以及一个空格)排列成预设的正确顺序。这个压缩包提供的资源包含了解决八数码...
它演示了使用A *算法解决第N个大小难题。用法环境搭建建议设置虚拟环境。 $ python3 -m venv venv$ source venv/bin/activate$ pip install pytest运行它设置好环境后,只需调用即可运行求解器$ python3 driver.py...
在这个案例中,我们关注的是一个名为“sudoku-solver”的项目,它使用了DLX(Dancing Links)算法来高效地求解数独难题。DLX算法是由日本数学家和程序员Hakuo Okada发明的,它是基于一种称为"Exact Cover"问题的解决...
在A*算法求解N码难题的过程中,每个可能的拼图状态被视为一个节点,相邻的状态(即通过移动一块拼图可以达到的状态)形成边。启发式函数h(n)常常选用曼哈顿距离或者汉明距离,这两个都是衡量当前状态与目标状态之间...
跑步: 通过在Windows上按SHIFT + RIGHT按钮或在Linux上打开Terminal,打开dist/目录上的Command Prompt / PowerShell / Terminal,然后键入以下任意项ENTER : java -jar 8-puzzle.jar 1用于汉明 ...