我想比较两种类型的变量T extends Number.现在我想知道这两个变量中哪一个大于另一个或相等.不幸的是我还不知道确切的类型,我只知道它将是一个子类型java.lang.Number.我怎样才能做到这一点?
编辑:我试图用另一种解决方法TreeSets,这实际上自然排序工作(当然它的工作原理,所有的子类Number实现Comparable除的AtomicInteger和AtomicLong的).因此,我将丢失重复值.使用Lists时,Collection.sort()由于绑定不匹配,不接受我的列表.非常不满意.
在Java中,我们不能在具有相同名称的另一个变量的同一范围内声明变量:
int someInteger = 3;
...
int someInteger = 13;
Run Code Online (Sandbox Code Playgroud)
语法错误,不编译.但是,如果我们把它放在一个循环中:
for (int i = 0; i < 10; i++) {
int someInteger = 3;
}
Run Code Online (Sandbox Code Playgroud)
生成没有错误,效果很好.我们基本上声明了相同的变量.是什么原因?在这背后我不了解/理解的逻辑是什么?
如果标题不清楚,我道歉.
现在,在字符串索引从0开始.例如:
Index 0 1 2 3 4
String H E L L O
Run Code Online (Sandbox Code Playgroud)
在这种情况下,最后一个索引是4.
如果我想尝试做这样的事情:
System.out.println("hello".charAt(5));
Run Code Online (Sandbox Code Playgroud)
它应该抛出一个"超出界限的索引".
但是,如果我尝试运行以下代码:
System.out.println("hello".substring(5));
Run Code Online (Sandbox Code Playgroud)
它确实运行!我写了类似的代码,后来注意到了,无法弄明白.
最终,问题是我们不应该达到这个指数的可能性如何?它允许我们写:
stringObj.substring(stringObj.length());
Run Code Online (Sandbox Code Playgroud)
而且它看起来不太安全,因为stringObj.length()返回一个比最后一个索引多一个的整数.
它是故意制造的,这是否有目的?如果是这样,这个目的是什么,它带来了什么好处?
如果在不使用"new"关键字的情况下声明它们,则对同一对象的字符串引用,如下所示:
String s1 = "Some string";
String s2 = "Some string";
System.out.println(s1 == s2);
//prints true because
//they reference to the same object
Run Code Online (Sandbox Code Playgroud)
但是,与我的预期相反,这与数组不起作用:
char[] anArray = {'A', 'r', 'r', 'a', 'y'};
char[] oneArray = {'A', 'r', 'r', 'a', 'y'};
System.out.println("anArray == oneArray : " + (anArray == oneArray));
//prints false
Run Code Online (Sandbox Code Playgroud)
我们没有明确提到它们是"新"数组,为什么它们不引用堆上的同一个对象呢?
String str1 = new String("I love programming");
String str2 = new String("I love programming");
boolean boo = str1 == str2; // evaluates to false
String str1 = "I love programming";
String str2 = "I love programming";
boolean boo = str1 == str2; // evaluates to true
Run Code Online (Sandbox Code Playgroud)
为什么第一个评估为假,第二个评估为真?
在这里你可以找到更多:什么是Java字符串池以及"s"与新String("s")有何不同?
首先,我希望您在这里查看最佳答案。
正如你所看到的,它说,编译语言更快。但是,我理所当然地知道编译器会获取整个源代码,将其编译为机器代码,然后执行它。解释器一次接受一个语句,将其翻译成机器代码或虚拟机代码,然后立即执行。所以我们在运行时即时获得输出。
那么解释型语言不是比编译型语言快吗?
我只是想知道这些类型的评论之间是否存在任何差异.
/*
...
Content of the comment
...
*/
Run Code Online (Sandbox Code Playgroud)
和
/*
* ...
* Content of the comment
* ...
*/
Run Code Online (Sandbox Code Playgroud)