我的程序在初始化程序之前从用户获取用户名和密码验证,因此我创建了一个登录按钮,我将ActionListener关联到以下所示
login.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
if(txtUserName.getText().equals("Suraj") && (txtPwd.getPassword().toString()).equals("s123")){
dispose();
TimeFrame tFrame = new TimeFrame(userName);
tFrame.setVisible(true);
tFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
tFrame.setLayout(new GridLayout());
} else {
JOptionPane.showMessageDialog(null,"User name or password don't match","Acces Denied", JOptionPane.ERROR_MESSAGE);
}
Run Code Online (Sandbox Code Playgroud)
现在出现的问题是即使输入正确的密码,程序也会显示错误消息
智者
我试图理解弱引用,我在wiki中看到了以下代码:
import java.lang.ref.WeakReference;
public class ReferenceTest {
public static void main(String[] args) throws InterruptedException {
WeakReference r = new WeakReference(new String("I'm here"));
WeakReference sr = new WeakReference("I'm here");
System.out.println("before gc: r=" + r.get() + ", static=" + sr.get());
System.gc();
Thread.sleep(100);
// only r.get() becomes null
System.out.println("after gc: r=" + r.get() + ", static=" + sr.get());
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么只有r变为null,即使它持有一个强引用(新字符串)?
如果我从方法调用或从中获取字符串对象StringBuilder.toString(),该字符串是否会添加到字符串池中?
String类是否仅在类加载期间添加到池中?
在阅读了Java String Pool之后,我决定进行一些测试.我编写了以下测试程序,根据JDK规范,它的结果与Java String Pool行为不匹配.
public class Temp_20141220 {
private String b1 = "hello";
public static void main(String[] args) {
Temp_20141220 t = new Temp_20141220();
String b = "hello";
System.out.println("b==b1 =" + t.b1 == b);
}
}
Run Code Online (Sandbox Code Playgroud)
我一直期望得到输出:b == b1 = true但是我得到了:b == b1 = false
为什么这样?Ubuntu的JVM不支持这个Java字符串池功能吗?
在这里查看一些Fortify的发现,它告诉我不要对敏感数据使用字符串数据类型,因为它们可能会在内存中停留太长时间.如果存在无关的内存攻击,例如Heartbleed,则会暴露用户的数据.
如果我在使用后将字符串var设置为null,那么该内存位置是否实际被清除,或者是为存储null而创建的var的副本?
谢谢
val hello1 = "hello"
val hello2 = "hello"
printf(hello1 === hello2)
Run Code Online (Sandbox Code Playgroud)
为什么打印真实?
我猜kotlin有一个原始类型的池(或类似的东西).如果值是相等的,则指针指向同一个地方.我不确定.
我知道如果我有 2 个具有相同值的字符串变量,由于 java 字符串池,它们指向同一个字符串对象。
下面是一个例子:
String test = "1234";
String test2 = "1234";
System.out.println(test == test2);
System.out.println("1234" == test2);
Run Code Online (Sandbox Code Playgroud)
输出如下:
true
true
Run Code Online (Sandbox Code Playgroud)
但是如果我有以下代码,它会打印出它们不是同一个对象
String test = "1234";
int i = 1234;
String s = "" + i;
System.out.println(test == s);
System.out.println("1234" == s);
Run Code Online (Sandbox Code Playgroud)
输出:
false
false
Run Code Online (Sandbox Code Playgroud)
任何人都会向我解释这种行为的原因吗?
如果我写:
String s = new String("abc");
Run Code Online (Sandbox Code Playgroud)
它创建一个类型String为"abc"的对象.如果我写:
String s = "abc";
Run Code Online (Sandbox Code Playgroud)
这也会创建一个值为"abc"的对象.如何在不遇到新关键字的情况下创建对象.
如果我写:
s.append("def");
Run Code Online (Sandbox Code Playgroud)
它创建了另外两个字符串对象:
a. "abcdef"
b. "def"
Run Code Online (Sandbox Code Playgroud)
因此,在遇到双重引号内的任何内容时,都会创建一个新String对象.这是怎么发生的?
由于我的写作,我没有给出任何理由的代码审查失败,因为一个函数s(String类型)作为参数传递
if (s == null){
s = new String();
}
Run Code Online (Sandbox Code Playgroud)
说我应该用s = "";.为什么?
假设我有一个函数:
fun equality() {
var a = "kotlin"
var b = "kotlin"
var c = a
println(a==b) //true
println(a===b) //false
println(a==c) //true
println(a===c) //true
}
Run Code Online (Sandbox Code Playgroud)
根据kotlin === a和b是不同的实例,所以我的预期输出是:
true
false
true
true
Run Code Online (Sandbox Code Playgroud)
但实际上显示:
true
true
true
true
Run Code Online (Sandbox Code Playgroud)
我不明白a === b是怎么回事。
我有以下代码:
Circle c1 = new Circle();
Circle c2 = new Circle();
System.out.println(c1 == c2);
Run Code Online (Sandbox Code Playgroud)
False按预期方式输出哪些产出.这是因为c1并且c2是引用类型和"=="检查它们是否引用相同的类型(它们不是).
但是,我最近试过这个:
String a = "hello";
String b = "hello";
System.out.println(a == b);
Run Code Online (Sandbox Code Playgroud)
由于某种原因输出True.为什么是这样?String是引用类型,a并且b指向不同的内存位置.我总是被告知你需要使用.equals()它来工作,这不是!
更新
这不是重复!我知道比较字符串的正确方法是使用.eqauls()
更新2 这个问题可能有一个答案:我如何比较Java中的字符串?,但问题是没有问我在问什么,答案只是比需要更详细.
因此,使用我的相同问题(在谷歌或其他方面)进行搜索意味着用户将不会被发送到该问题,或者由于问题的标题而可能完全解雇该问题.因此,为了其他用户的利益而保持这一点可能是一个好主意!
String str1=""和之间有什么区别String str2 =null?当我们打印str1时没有输出,当我们打印str2输出时null.
java ×10
string ×4
kotlin ×2
pool ×2
equality ×1
fortify ×1
heap-memory ×1
reference ×1
string-pool ×1
swing ×1