将数组分配给新变量,更改原始更改新的变量

int[] test = {0,1,2,3,4,5}; int[] before = test; System.out.println(before[2]); test[2] = 65; System.out.println(before[2]); 第一个System.out打印2 ,它应该,但第二个打印65 。 我用这种语言编程了一年多,据我所知,这不应该发生! 有帮助吗? int first = 9; int second = first; System.out.println(second); first = 10; System.out.println(second); 上面的代码在两行上打印9 。

Java:为什么需要包装类?

在非常高的层次上,我知道我们需要通过使用它们各自的包装类来“包装”原始数据类型,例如int和char,以便在Java集合中使用它们。我想了解Java集合在Java集合中是如何工作的。低级别问:“为什么我们需要将原始数据类型包装为能够在集合中使用它们的对象?”我提前感谢您的帮助。

StringIndexOutOfBoundException

嗨,我只是使用stringbuilder使用substring(int start,int end)获取字符串的某些部分..但我有这个错误 08-17 20:27:40.737: E/AndroidRuntime(15313): Caused by: java.lang.StringIndexOutOfBoundsException: length=3; regionStart=0; regionLength=4 08-17 20:27:40.737: E/AndroidRuntime(15313): at java.lang.AbstractStringBuilder.startEndAndLength(AbstractStringBuilder.java:216) 08-17 20:27:40.737: E/AndroidRuntime(15313): at java.lang.AbstractStringBuilder.substring(AbstractStringBuilder.java:625) 08-17 20:27:40.737: E/AndroidRuntime(15313): at java.lang.StringBuilder.substring(StringBuilder.java:44) 08-17 20:27:40.737: E/AndroidRuntime(15313): at com.example.john.Contact.getAllCallLogs(Contact.java:196) 08-17 20:27:40.737: E/AndroidRuntime(15313): at com.example.john.Contact.onCreate(Contact.java:49) 08-17 20:27:40.737: E/AndroidRuntime(15313): at android.app.Activity.performCreate(Activity.java:4479) 08-17 20:27:40.737: E/AndroidRuntime(15313): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 08-17 20:27:40.737: E/AndroidRuntime(15313): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2041) 这就是我简单实现的方式: StringBuilder str […]

模拟java.time.format.DateTimeFormatter类

我正在尝试模拟DateTimeFormatter类。 我做了以下事情: @RunWith(PowerMockRunner.class) @PrepareForTest({DateTimeFormatter.class}) public class UnitTest { private DateTimeFormatter mockDateFormatter; private AwesomeClass awesomeClass; @Before public void setUp() { mockDateFormatter = PowerMockito.mock(DateTimeFormatter.class); awesomeClass = new AwesomeClass(mockDateFormatter); } @Test public void shouldToTestSomethingAwesome() { // Other test code PowerMockito.when(mockDateFormatter.format(any(LocalDate.class))) .thenReturn(“20150224”); // Other test code } AwesomeClass使用它来格式化LocalDateTime.now(ZoneId.of(“UTC”)); 。 然后,格式化的字符串进一步用于生成另一个字符串。 我需要确保正确生成字符串。 所以我需要从格式化程序返回一致日期或模拟LocalDateTime.now(..)静态方法 我究竟做错了什么?

Java工厂模式与generics

我希望我的BallUserInterfaceFactory返回具有正确generics类型的用户界面的实例。 我被困在下面的例子中得到错误: 绑定不匹配:BallUserInterfaceFactory类型的generics方法getBaseballUserInterface(BASEBALL)不适用于参数(BALL)。 推断类型BALL不是有界参数的有效替代 public class BallUserInterfaceFactory { public static BallUserInterface getUserInterface(BALL ball) { if(ball instanceof Baseball){ return getBaseballUserInterface(ball); } //Other ball types go here //Unable to create a UI for ball return null; } private static BaseballUserInterface getBaseballUserInterface(BASEBALL ball){ return new BaseballUserInterface(ball); } } 我知道它不能保证BALL是一个棒球,因此getBaseballUserInterface方法调用中存在参数类型不匹配。 如果我在getBaseballUserInterface方法调用中转换ball参数,那么我得到错误: 类型不匹配:无法从BaseballUserInterface转换为BallUserInterface 因为它不能保证我返回的是同一类型的BALL。 我的问题是,处理这种情况的策略是什么? (为了完整性,这里是示例中所需的其他类) public class Ball { […]

可靠地将任何对象转换为String然后再返回

有没有可靠的方法将任何对象转换为String然后再返回到同一个对象? 我已经看到一些人使用toString()转换它们的例子,然后将该值传递给构造函数再次重构对象,但并非所有对象都有这样的构造函数,因此该方法不适用于所有情况。 会怎么样?

JDBC VS Hibernate

我们在Web应用程序中使用JDBC已经很长时间了。 我们使用它的主要原因是因为我们100%控制代码,sql和我们手中的东西。 除此之外,我们在数据库中使用了触发器,数据库由数据库专家单独开发。 然而,许多人现在建议使用Hibernate所以我们也考虑使用它。 但是,我们发现了以下问题。 Hibernate无法连接“现有”数据库。 它总是试图创建自己的一个。 我们的数据库可能由不同平台(云,服务器,VPS,个人计算机)中的同一应用程序访问。 Hibernate可能因为在这种情况下的缓存而产生问题。 我们从不喜欢将“表创建工作”赋予java代码。 我们总是手动创建表。 我们可能必须使用非常长且复杂的SQL语句。 上次我们使用超过150行的语句,加入了20多个表。 我们怀疑在Hibernate方面是否会遇到麻烦。 我们的SQL代码很好,很标准。 Hibernate生成的代码对我们来说似乎有点脏。 我们总是使用MySQL。 切勿使用任何其他数据库。 我们创建的应用程序需要最高安全性,与医疗相关。 如果泄漏了至少一个数据记录,我们就完成了。 数据库中有很多foreign keys , Primary Keys , Composite Keys , Unique Keys等。 在论坛中,一些人抱怨说Hibernate搞砸了。 我们决定尝试hibernate,因为有些人声称,“你是软件工程师吗?你正在使用已经死的JDBC !!”。 考虑到这些,请让我知道以上几点是否真实(正如我所说,我通过谷歌搜索,讨论等了解它们)或不是。 而且,Hibernate VS Java JDBC的优点和缺点是什么?

如何使用JDBC连接Azure SQL

我尝试使用MS JDBC驱动程序连接到Azure SQL: import java.sql.*; public class ExampleSQLJDBC { public static void main(String[] args) { // Setting. String connectionUrl = “jdbc:sqlserver://SERVER.database.windows.net:1433;database=DATABASE;encrypt=true;trustServerCertificate=true;”; String user = “USER@SERVER”; String pass = “PASSWORD”; // Declare the JDBC object. Connection conn = null; try { // Establish the connection. Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); conn = DriverManager.getConnection(connectionUrl, user, pass); } catch (Exception e) { […]

java.sql.SQLException:ResultSet关闭MySQL Java后不允许操作

每当我尝试使用这种方法时,我都会继续这样做。 java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:794) at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7077) at server.util.Plimus$1.run(Plimus.java:77) 这是在第77行: while (resultSet.next()) { public static void process(final Player c, final String playerName) { if (connection == null && connectionStatus == 0) createConnection(); else if (connectionStatus != 0) return; new Thread() { @Override public void […]

IndexOutOfBounds with array

每次我尝试运行此方法 private void resetOdds() { mOdds[1] = 0.10; mOdds[2] = 0.25; mOdds[3] = 0.35; mOdds[4] = 0.30; } 我收到IndexOutOfBounds错误。 我不知道为什么,因为我在数组中提供足够的项目来改变: private final double[] mOdds = { 0.10, 0.25, 0.30, 0.35 }; 有谁知道为什么我收到这个错误?