我只是很想知道 - 为什么Arrays.equals(double [] [],double [] [])返回false?实际上,当数组具有相同数量的元素并且每个元素是相同的?
例如,我进行了以下测试.
double[][] a, b;
int size =5;
a=new double[size][size];
b=new double[size][size];
for( int i = 0; i < size; i++ )
for( int j = 0; j < size; j++ ) {
a[i][j]=1.0;
b[i][j]=1.0;
}
if(Arrays.equals(a, b))
System.out.println("Equal");
else
System.out.println("Not-equal");
Run Code Online (Sandbox Code Playgroud)
返回false并打印"不相等".
另一方面,如果我有这样的事情:
double[] a, b;
int size =5;
a=new double[size];
b=new double[size];
for( int i = 0; i < size; i++ ){
a[i]=1.0;
b[i]=1.0;
}
if(Arrays.equals(a, b))
System.out.println("Equal");
else
System.out.println("Not-equal");
Run Code Online (Sandbox Code Playgroud)
返回true并打印"Equal".该方法仅适用于单个尺寸吗?如果是这样,Java中的多维数组是否有类似的东西?
我知道Java Date Time不是一个很好的前进方式,但我只是好奇发生了什么:
为什么以下行:
DateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.US)
不会产生任何错误,以下行:
DateFormat df = new SimpleDateFormat("DD-MMM-YYYY", Locale.US)
DateFormat df = new SimpleDateFormat("dd-mm-YYYY", Locale.US)
抛出以下异常:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'Y'
at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:769)
at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:576)
at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:501)
at testing.MySchedule.main(MySchedule.java:18)
Run Code Online (Sandbox Code Playgroud)
我的意思是我只是改变案子吧?但DateFormat真的那么愚蠢还是我做错了什么?或者它与我正在使用的Locale有关?
干杯
我想从字符串中删除所有下划线,并在下划线后面加上字符的大写字母.所以例如:_my_string_变成:MyString相似:my_string成为MyString
有更简单的方法吗?我目前有以下(假设没有输入有两个连续的下划线):
StringBuilder sb = new StringBuilder();
int i;
for (i = 0; i < input.Length - 1; i++)
{
if (input[i] == '_')
sb.Append(char.ToUpper(input[++i]));
else if (i == 0)
sb.Append(char.ToUpper(input[i]));
else
sb.Append(input[i]);
}
if (i < input.Length && input[i] != '_')
sb.Append(input[i]);
return sb.ToString();
Run Code Online (Sandbox Code Playgroud)
现在我知道这并不是完全相关的,但我想在答案中提供的实现上运行一些数字,这里是使用1000000 iterations字符串的每个实现的毫秒结果"_my_string_121_a_":
Achilles: 313
Raj: 870
Damian: 7916
Dmitry: 5380
Equalsk: 574
Run Code Online (Sandbox Code Playgroud)
方法:
Stopwatch stp = new Stopwatch();
stp.Start();
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 这可能是一个愚蠢的问题但是,这个程序的输出(它的方式)可以为零吗?
public class Test2{
int a = 0;
AtomicInteger b = new AtomicInteger();
public static Test2 c = new Test2();
public static void main(String[] args){
Thread t1 = new Thread(new MyTest1());
Thread t2 = new Thread (new Mytest2());
t1.start();
t2.start();
}
}
class MyTest1 implements Runnable{
public void run(){
Test2.c.a = 1;
Test2.c.b.compareAndSet(0,1);
}
}
class Mytest2 implements Runnable{
public void run(){
int x = 0;
if(Test2.c.b.get() == 1)
x = Test2.c.a;
System.out.println("Value of x = "+x);
}
}
Run Code Online (Sandbox Code Playgroud)
我问这个的原因是,虽然我正在使用AtomicInteger,但MyTest2中的if()语句可能先执行,然后x的值为zero..right? …