- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Kotlin 中遇到了一个非常奇怪的无法解释的值比较问题,以下代码打印 假
data class Foo (
val a: Byte
)
fun main() {
val NUM: Byte = 1
var m: Foo? = Foo(NUM)
println(m?.a == NUM)
}
但是如果我将最后一行更改为
println(m?.a === NUM)
hoặc
println(m!!.a == NUM)
它打印
真实 ,我很困惑,谁能帮忙解释一下?谢谢。
1 Câu trả lời
该问题仅出现在 1.5.20 版本中,而 1.5.10 版本不受影响。
这似乎是较新的 kotlin 编译器版本中的一个问题。
使用一些字节码,我们可以解释问题( data class
被称为 Blah
,chức năng
被称为 blah
).
这是用 1.5.10 编译的字节码,返回 ĐÚNG VẬY
vì println(m?.a == NUM)
- 一切似乎都很好。我们正在做两个数字的原始不等于,它返回 SAI
(正确,因为 1 != 1
Đúng SAI
).
Compiled from "WtfTest.kt"
public final class de.sfxr.WtfTest {
public de.sfxr.WtfTest();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."":()V
4: return
public final void blah();
Code:
0: iconst_1
1: istore_1
2: new #14 // class de/sfxr/Blah
5: dup
6: iload_1
7: invokespecial #17 // Method de/sfxr/Blah."":(B)V
10: astore_2
11: aload_2
12: astore_3
13: aload_3
14: invokevirtual #21 // Method de/sfxr/Blah.getA:()B
17: iload_1
18: istore_3
19: iload_3
// PRIMITIVE NOT EQUALS => False
20: if_icmpne 27
23: iconst_1
24: goto 28
27: iconst_0
28: istore_3
29: iconst_0
30: istore 4
32: getstatic #27 // Field java/lang/System.out:Ljava/io/PrintStream;
35: iload_3
36: invokevirtual #33 // Method java/io/PrintStream.println:(Z)V
39: return
}
然而在版本 1.5.20 中,字节码指示使用 JVM 进行对象比较
Intrinsics.areEqual
盒装
Số nguyên
有内容
1
和盒装
Byte
有内容
1
,这将返回
SAI
, 因为它使用
equals
hiện hữu
Byte
.这就是这个问题的原因。编译器开发人员肯定想要
ĐÚNG VẬY
在此刻。
Byte.equals
的 fragment 的描述“当且仅当参数不为空
并且是包含与此对象相同的字节值的字节对象 时,结果才为真。”
Compiled from "WtfTest.kt"
public final class de.sfxr.WtfTest {
public de.sfxr.WtfTest();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."":()V
4: return
public final void blah();
Code:
0: iconst_1
1: istore_1
2: new #14 // class de/sfxr/Blah
5: dup
6: iload_1
7: invokespecial #17 // Method de/sfxr/Blah."":(B)V
10: astore_2
11: aload_2
12: astore_3
13: aload_3
14: invokevirtual #21 // Method de/sfxr/Blah.getA:()B
17: invokestatic #27 // Method java/lang/Byte.valueOf:(B)Ljava/lang/Byte;
20: iload_1
21: invokestatic #32 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
// OBJECT COMPARISON VIA JVM ON BOXED BYTE(1) AND BOXED INT(1) => False
24: invokestatic #38 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
27: istore_3
28: iconst_0
29: istore 4
31: getstatic #44 // Field java/lang/System.out:Ljava/io/PrintStream;
34: iload_3
35: invokevirtual #50 // Method java/io/PrintStream.println:(Z)V
38: return
}
làm mới
关于android - Kotlin 中的奇怪值比较问题, "==="返回 true 但 "=="返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68356051/
Điều tôi muốn làm là để JTextPane chiếm càng nhiều không gian càng tốt trong JPanel. Đối với UpdateInfoPanel tôi sử dụng: public class UpdateInfoPanel extends JP
Tôi có một JTextArea trong JPanel và tôi muốn sử dụng nó với JScrollPane. Tôi đang sử dụng GridBagLayout. Khi tôi chạy nó, khung dường như tạo chỗ cho JScrollPane, nhưng
Tôi muốn đạt được chức năng sau trong xcode. Tôi có một Bộ điều khiển chế độ xem. Trong UIViewController này, tôi có một UITabBar. Bên dưới chúng là UIView. UITab
Có ai biết trong Firebird 2.5 có chức năng nào tương tự như hàm "STUFF" trong SQL không? Tôi có một bảng chứa các bản ghi người dùng cha và một bảng khác chứa các bản ghi người dùng con liên quan đến cha. Tôi muốn có thể trích xuất một chuỗi được phân tách bằng dấu phẩy của "ROLES" mà người dùng có, trong khi
Tôi muốn sử dụng JSON làm đầu vào và đầu ra của kênh mirth, ví dụ như thông tin chi tiết được lưu trong cơ sở dữ liệu hoặc tin nhắn HL7 được tạo. Nói tóm lại, đầu vào là JSON, phân tích cú pháp và đầu ra là bất kỳ định dạng nào. Câu trả lời hay nhất: var object
Thông thường tôi sẽ sử dụng R và thực hiện merge.by, nhưng tệp này có vẻ quá lớn đối với bất kỳ máy tính nào trong khoa để xử lý! (Thông tin bổ sung cho bất kỳ ai làm việc trong lĩnh vực di truyền học) Về cơ bản, việc quy imputation dường như đã xóa các số rs cho ID snp và tôi còn lại
Tôi có một câu hỏi có thể đã được hỏi trước đây, nhưng tôi đang gặp khó khăn trong việc tìm ra mô tả phù hợp. Tôi hy vọng có ai đó có thể giúp tôi. Trong mã bên dưới, tôi đã đặt varprice và tôi muốn thêm biến javascript accu_id để tra cứu bản ghi trong cơ sở dữ liệu của tôi thông qua rails
Tôi có một tệp SVG đơn giản hiển thị tốt trên Firefox - tệp này có một số văn bản được bao bọc chứa một số mã HTML bằng cách sử dụng foreignObject - văn bản được bao bọc trong một div:
Vì vậy, tôi đang viết một chương trình Ruby cho trường học để thay đổi giá trị bool thành true nếu giá trị là 1 hoặc 3 và thành false nếu giá trị là 0 hoặc 2. Vì tôi có kiến thức nền về Java nên tôi nghĩ đoạn mã này sẽ hoạt động:
Những gì tôi đã làm: Tôi đã tạo kết nối ngang hàng VPC giữa các tài khoản này. Internet Gateway cũng được đính kèm vào mỗi VPC. Ngoài ra, tôi cũng đã cấu hình bảng định tuyến (để cho phép lưu lượng truy cập từ cả hai phía). Trường hợp 1: Khi cả hai VPC đều nằm trong cùng một tài khoản, tôi đã thử nghiệm thành công kết nối từ một La khác.
Tôi có một bảng có tên là danh bạ: user_id contact_id 10294 10295 10294 10293 10293 10294 102
Tôi đang sử dụng mẫu mới trong Magento. Để tránh trùng lặp mã, tôi muốn sử dụng cùng một mẫu con cho mỗi bản xem trước sản phẩm. Cụ thể, tôi đã tạo một màn hình như thế này: $products = Mage::getModel('catalog/pro
"for" có luôn kiểm tra loại đối số đầu tiên trong mọi hàm được định nghĩa trong giao thức không? Chỉnh sửa (sửa lại): Khi một phương thức giao thức chỉ có một tham số, một triển khai sẽ được tìm thấy dựa trên kiểu của tham số duy nhất đó (trực tiếp hoặc tùy ý). Khi thỏa thuận (p
Tôi muốn gọi một hàm JavaScript từ mã PHP của mình. Tôi đã thực hiện điều này bằng cách sử dụng: echo ' drawChart($id); '; Điều này hoạt động tốt nhưng tôi muốn lấy dữ liệu từ mã PHP của mình và tôi sử dụng
Câu hỏi này đã có câu trả lời: Liên kết sự kiện trên các phần tử được tạo động? (23 câu trả lời) Đã đóng 5 năm trước. Tôi có một biểu mẫu động mà tôi muốn thêm một số h khác
Tôi đang cố tìm giải pháp để sử dụng setState trên một mục bản đồ trong componentDidMount. Tôi đang sử dụng GraphQL với Gatsby để trả về nhiều mục dữ liệu, nhưng yêu cầu
Tôi có một View bên trong một ScrollView. Miễn là người dùng giữ nút View, tôi muốn gọi một phương thức sau mỗi 80 mili giây. Đây là những gì tôi đã thực hiện: final Runnable rung = new Runnab
Tôi đã phát triển một ứng dụng Android bằng jni. Tôi nhận được lỗi dvmabort trong dvmDecodeIndirectRef của GetStringUTFChars. Tôi chỉ dừng lại một lần. Tại sao lại thế này
Khi đến phần Hoạt động, tôi gọi FragmentPagerAdapter để xử lý các tab khác nhau. Trong một trong các tab của tôi, tôi muốn hiển thị RecyclerView nhưng nó không bao giờ xuất hiện, với các điểm dừng mà tôi thấy
Khi tôi nhấn một nút trong Activity, DialogFragment sẽ bật lên. Trong đoạn hộp thoại, có một RecyclerView trông giống như một ListView bình thường. Hành vi tôi muốn là khi
Tôi là một lập trình viên xuất sắc, rất giỏi!