Flutter:为什么两个const SizedBox()不相同

时间:2019-12-07 10:46:44

标签: flutter dart

代码:

@override
Widget build(BuildContext context) {
  const one = const SizedBox();
  const two = const SizedBox();

  print('${identical(one, two)}'); // prints false, should print true
  return Container();
}

我做错什么了吗?

1 个答案:

答案 0 :(得分:0)

不,您没有做错什么。 答案是错误的,仅仅是因为它们存储在内存中时是两个完全独立的对象。

用于检查相等性的相同方法类似,仅查看基础对象或引用变量是否相同,而不是它们所属的类。

证明:

Widget build(BuildContext context) {
    const one = const SizedBox();
    const two = const SizedBox();
    print(one.hashCode);
    print(two.hashCode);
    print('${identical(one, two)}'); // 
    print('${one==two?'t':'f'}');
    return MaterialApp(home: Container(child: Text('_'),));

输出:

I/flutter ( 3657): 779669181 
I/flutter ( 3657): 731265968 
I/flutter ( 3657): false 
I/flutter ( 3657): f